4

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

任何帮助表示赞赏。

4

3 回答 3

3

像这样:

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

结果:

  a b
1 1 3
2 2 4
于 2012-04-18T12:57:38.410 回答
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
于 2012-04-18T16:52:00.603 回答
2

如果你想保持 B 的值与 x 中的顺序相同,你可以试试这个:

data.frame(split(x$B, x$A))
于 2012-04-18T12:11:50.943 回答