我有一个包含多列的数据集:
Value1 Value3 Annotation Value4 Value2
1 4 s 9 4
2 5 t 0 4
3 6 q 4 4
值的顺序和Annotation
的位置未知。
现在,我尝试追加多个列并尝试保持Annotation
正确无误。结果应该是2列矩阵
例如。当我尝试追加Value1
和Value3
:
Annotation Valuelist
s 1
t 2
q 3
s 4
t 5
q 6
我找到了方法append()
,但我无法弄清楚如何确保注释正确。
答案 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