2016-01-22 29 views
2

有了这个代码融化所选择的单个列:如何在数据帧

dat <- structure(list(Probes = structure(1:6, .Label = c("1415670_at", 
"1415671_at", "1415672_at", "1415673_at", "1415674_a_at", "1415675_at" 
), class = "factor"), Genes = structure(c(2L, 1L, 4L, 5L, 6L, 
3L), .Label = c("Atp6v0d1", "Copg1", "Dpm2", "Golga7", "Psph", 
"Trappc4"), class = "factor"), FOO = c(1.133, 1.068, 
1.01, 0.943, 1.048, 1.053)), .Names = c("Probes", "Genes", "FOO" 
), row.names = c(NA, 6L), class = "data.frame") 

我创建了以下数据帧:

 Probes Genes FOO 
1 1415670_at Copg1 1.133 
2 1415671_at Atp6v0d1 1.068 
3 1415672_at Golga7 1.010 
4 1415673_at  Psph 0.943 
5 1415674_a_at Trappc4 1.048 
6 1415675_at  Dpm2 1.053 

我想要做的是选择最后一列和把它融化如下:

FOO 1.133 
FOO 1.068 
FOO 1.010 
FOO 0.943 
FOO 1.048 
FOO 1.053 

我该怎么做?

我坚持用这个代码:

library(reshape2) 
melt(dat[,ncol(dat)]) 
+0

预期产量是多少?有2列的数据框?具有1列+行名的数据框?还有别的吗? – 2016-01-22 03:15:18

回答

3

我们可以选择“富”列使用后stack

stack(dat['FOO']) 

或者

melt(dat['FOO']) 

dat[,'FOO']不是data.frame。这是一个vector。我们可以在?Extract中找到[,[[等之间的区别。当有一列时,[的默认选项是drop=TRUE。如果我们使用,来指定行索引,我们可以指定drop=FALSE

stack(dat[, "FOO", drop=FALSE]) 

如果我们不知道列名,只需要用ncol

stack(dat[ncol(dat)]) 

的区别在于我们如何使用它,并且返回的对象。

+0

假设我不知道'FOO',我只想选择*最后一列*。我如何修改你的代码来使用索引。 – neversaint

+2

@neversaint - 你已经拥有它了''ncol(dat)' – thelatemail

+0

@neversaint也注意到栈可以用于字符和数字或组合,但不是你在示例中使用的因素 – rawr