【发布时间】:2014-12-16 13:04:37
【问题描述】:
我正在寻找一种更优雅的方式来通过使用 melt (reshape2) 或 reshape 函数来重塑我的数据框。
假设我有一个像这样的简单数据框:
d<-data.frame("PID"=factor(c(1,1,1,2,2,2)),
"Cue1"=factor(c(1,2,3,1,2,3)),
"Cue2"=factor(c(5,5,5,5,5,5)))
我想将第二列和第三列转换为一个长列。我下面的代码有效,但我正在寻找一种更优雅的方式:
d1<-data.frame("trigger"=as.vector(t(d[,c(2:3)])))
d1$PID<-factor(rep(c(1,2),each=6))
重要的是两个因子的级别数不同(Cue1 有 3 个,Cue2 有 1 个级别)。我上面的代码给了我一个看起来像这样的新列(这实际上是我想要的):
trigger
1
5
2
5
3
5
...
不幸的是,互联网上关于 reshape 的大多数示例都讨论了以下(在我的情况下是非首选)示例:
trigger
1
2
3
1
2
3
...
但我需要前一个。
提前感谢您的建议。
【问题讨论】:
-
优雅是什么意思?在紧凑性方面?不要认为任何变体都会比你所做的要短得多。
-
在我的解决方案中,我必须为 PID 添加一个新列,以及另一个用于识别列中的值是来自 cue1 还是 2 的列(上例中未显示)。我认为已经有一种更紧凑、更简单的方法来做到这一点。
-
看我的回答。希望它能满足你的一些期望:)