使用cast()转换data.frame

时间:2012-04-18 11:23:40

标签: r dataframe

给出像这样的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),至少没有 选择“未定义的列”失败,但它仍然不是我想要的。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

像这样:

data.frame( tapply(x$B, x$A, list))

结果:

  a b
1 1 3
2 2 4

答案 1 :(得分:3)

我最近也在努力理解cast。您所需的输出会在同一行显示值13。但是您的输入不提供该信息。添加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))