R以不同方式附加列

时间:2014-04-23 15:04:00

标签: r append

我有一个包含多列的数据集:

Value1 Value3 Annotation Value4 Value2
1        4        s        9       4
2        5        t        0       4
3        6        q        4       4

值的顺序和Annotation的位置未知。

现在,我尝试追加多个列并尝试保持Annotation正确无误。结果应该是2列矩阵

例如。当我尝试追加Value1Value3

Annotation Valuelist
s             1
t             2
q             3
s             4
t             5
q             6

我找到了方法append(),但我无法弄清楚如何确保注释正确。

2 个答案:

答案 0 :(得分:2)

stack函数可能会对您想要在基数R中执行的操作派上用场:

cbind(mydf["Annotation"], stack(mydf[c("Value1", "Value3")])["values"])
#   Annotation values
# 1          s      1
# 2          t      2
# 3          q      3
# 4          s      4
# 5          t      5
# 6          q      6

stack通常会创建两列,"值"和" ind" (按此顺序),所以我们只选择第一个匹配你描述的内容。


可以使用来自" reshape2"的melt采取类似方法:

library(reshape2)
melt(mydf, id.vars="Annotation", 
     measure.vars=c("Value1", "Value3"))[c("Annotation", "value")]
#   Annotation value
# 1          s     1
# 2          t     2
# 3          q     3
# 4          s     4
# 5          t     5
# 6          q     6

答案 1 :(得分:1)

您可以使用以下内容构建此内容:

columns <- c("Value1", "Value3")
data.frame(Annotation=rep(dat$Annotation, length(columns)),
           Valuelist=as.vector(as.matrix(dat[columns])))
#   Annotation Valuelist
# 1          s         1
# 2          t         2
# 3          q         3
# 4          s         4
# 5          t         5
# 6          q         6