R变换数据帧(分组)

时间:2013-11-09 20:33:31

标签: r plyr reshape2

我是R和Stack Overflow的新手,所以希望我在这里遵循协议。

如何转换数据框,如:

FRUIT   NUMBER  NAME    AGE
apples  5       Joe     13
oranges 6       Joe     13
apples  2       Mary    10
oranges 4       Mary    10

成为分组数据,如:

NAME    AGE  APPLES ORANGES
Joe     13   5       6
Mary    10   2       4

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用包dcast中的reshape2功能。

> library('reshape2')
> d <- read.table(header=T, text="FRUIT   NUMBER  NAME    AGE
+ apples  5       Joe     13
+ oranges 6       Joe     13
+ apples  2       Mary    10
+ oranges 4       Mary    10");


> dcast(d, NAME + AGE ~ FRUIT, value.var='NUMBER')
  NAME AGE apples oranges
1  Joe  13      5       6
2 Mary  10      2       4

这是将数据从(稍微)长格式更改为深层格式,您可以找到有关如何处理此任务的更多详细信息here

答案 1 :(得分:0)

使用sqldf

library(sqldf)
sqldf('SELECT NAME, AGE,
      MAX(CASE WHEN FRUIT = "apples" THEN NUMBER ELSE NULL END) apples, 
      MAX(CASE WHEN FRUIT = "oranges" THEN NUMBER ELSE NULL END) oranges
      FROM d 
      GROUP BY NAME 
      ORDER BY NAME')

输出:

  NAME AGE apples oranges
1  Joe  13      5       6
2 Mary  10      2       4