如何在ddply()函数中引用它自己的分组数据框

时间:2016-12-06 01:49:28

标签: r plyr

可以通过ddply()通过某些变量对数据帧进行分组,但是如何引用分组数据框作为函数的参数?

以min()为例:

我有什么:

> BodyWeight
  Treatment day1 day2 day3
1         a   32   33   36
2         a   35   35   26
3         a   33   38   46
4         b   23   24   25
5         b   22   16   34
6         b   36   35   37
7         c   45   45   39
8         c   29   26   12
9         c   43   27   36

我想要的是什么:

Treatment min
1         a  26
2         b  16
3         c  12

我做了什么,得到了什么:

> ddply(BodyWeight, .(Treatment), summarize, min= min(BodyWeight[,-1]))
  Treatment min
1         a  12
2         b  12
3         c  12

min()只是一个例子,需要非特定的解决方案。

2 个答案:

答案 0 :(得分:1)

你想要的是按治疗和日总结。问题是你有多天的日子。您需要将数据从宽格式(多列)转换为长格式(键值对)。

library(tidyr)
library(plyr)

bw_long <- gather(Bodyweight, day, value, day1:day3)

ddply(bw_long, .(Treatment, day), summarize, min = min(value))

P.S。查看plyrdplyr

的后续版本

答案 1 :(得分:1)

我们可以使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(BodyWeight)),按&#39;处理&#39;,unlist Dataset的子集(.SD)分组并获取min值。

library(data.table)
setDT(BodyWeight)[, .(min = min(unlist(.SD))) , by = Treatment]
#   Treatment min
#1:         a  26
#2:         b  16
#3:         c  12