nev*_*int 26 r reshape reshape2
我有以下数据:
Cubn 3.71455160837536 0.237454645363458
Gm9779 2.56051657980096 0.20850752817264
Apod 3.51796703048962 0.195999214485821
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建'融化'数据,以便它给出这个
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
Run Code Online (Sandbox Code Playgroud)
但为什么这会失败?
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)
Run Code Online (Sandbox Code Playgroud)
A5C*_*2T1 50
我不知道为什么部分,但我知道你可以melt通过一个matrix而不是一个来获得行名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
Run Code Online (Sandbox Code Playgroud)
你必须查看melt函数的代码才能知道它为什么会这样.特别是,代码reshape2:::melt.matrix具有以下行,这些行将在上面的示例中创建前两列:
labels <- expand.grid(lapply(dn, var.convert), KEEP.OUT.ATTRS = FALSE,
stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12960 次 |
| 最近记录: |