给定一个这样的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)
至少不会因“选择未定义的列”而失败,但它仍然不是我想要的。
任何帮助表示赞赏。
像这样:
data.frame( tapply(x$B, x$A, list))
结果:
a b
1 1 3
2 2 4
我最近也一直在努力理解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
如果你想保持 B 的值与 x 中的顺序相同,你可以试试这个:
data.frame(split(x$B, x$A))