【问题标题】:R transform data frame (group by)R变换数据框(分组依据)
【发布时间】:2013-11-09 20:33:31
【问题描述】:

我是 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

提前致谢。

【问题讨论】:

  • 您好,欢迎来到 SO!感谢您发布最小示例数据集和您的预期答案,由于您提到了 SO 协议,您可以阅读 about Stackoverflowwhat to ask。如果您表明您已经尝试过自己,人们通常更愿意提供帮助,即您到目前为止尝试过的代码以及为什么它不起作用。干杯。

标签: r plyr reshape2


【解决方案1】:

您可以使用包reshape2中的函数dcast

> 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

【讨论】:

    【解决方案2】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2018-05-25
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多