给出像这样的data.frame
> x <- data.frame(A=c('a','a','b','b'), B=c(1,2,3,4))
> x
A B
1 a 1
2 a 2
3 b 3
4 b 4
我想将其转换为
a b
1 1 3
2 2 4
这应该是一个简单的操作,但我无法弄清楚如何做到这一点。
我最接近的是cast(x, . ~ A)
,至少没有
选择“未定义的列”失败,但它仍然不是我想要的。
任何帮助表示感谢。
答案 0 :(得分:3)
像这样:
data.frame( tapply(x$B, x$A, list))
结果:
a b
1 1 3
2 2 4
答案 1 :(得分:3)
我最近也在努力理解cast
。您所需的输出会在同一行显示值1
和3
。但是您的输入不提供该信息。添加id
列可以解决问题。
library(reshape2)
x <- data.frame(id=c(1, 2, 1, 2), A=c('a', 'a', 'b', 'b'), B=c(1, 2, 3, 4))
dcast(x, id ~ A, value.var="B")
# id a b
# 1 1 1 3
# 2 2 2 4
答案 2 :(得分:2)
如果你想以与x中相同的顺序维持B的值,你可以试试这个:
data.frame(split(x$B, x$A))