为什么重塑2的熔化不能捕获转换中的行名? [英] Why reshape2's Melt cannot capture rownames in the transformation?

查看:10
本文介绍了为什么重塑2的熔化不能捕获转换中的行名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据:

Cubn    3.71455160837536    0.237454645363458
Gm9779  2.56051657980096    0.20850752817264
Apod    3.51796703048962    0.195999214485821

我想要做的是创建‘熔化’数据,以便它提供

       var1 var2     value
1      FOO Cubn   3.7145516
2      FOO Gm9779 2.5605166
3      FOO Apod   3.5179670
4      BAR Cubn   0.2374546
5      BAR Gm9779 0.2085075
6      BAR Apod   0.1959992

但为什么此操作失败?

 library("reshape2");
 dat <-read.table("http://dpaste.com/1446132/plain/",header=FALSE)
 rownames(dat) <- dat[,1]
 dat[,1] <- NULL
 colnames(dat) <- c("FOO","BAR");
 head(dat)
 longData <- melt(dat);
 head(longData)

推荐答案

我不知道为什么部分,但我知道您可以通过melt而不是data.frame

获得行名
melt(as.matrix(dat))
#     Var1 Var2     value
# 1   Cubn  FOO 3.7145516
# 2 Gm9779  FOO 2.5605166
# 3   Apod  FOO 3.5179670
# 4   Cubn  BAR 0.2374546
# 5 Gm9779  BAR 0.2085075
# 6   Apod  BAR 0.1959992

您必须查看melt函数的代码,才能知道它为什么会有这种行为。具体地说,reshape2:::melt.matrix的代码有以下几行,它们将创建上面示例中的前两列:

labels <- expand.grid(lapply(dn, var.convert), KEEP.OUT.ATTRS = FALSE, 
    stringsAsFactors = FALSE)

这篇关于为什么重塑2的熔化不能捕获转换中的行名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆