我有一个格式的数据框:
Family Code Length Type
1 A 1 11 Alpha
2 A 3 8 Beta
3 A 3 9 Beta
4 B 4 7 Alpha
5 B 5 8 Alpha
6 C 6 2 Beta
7 C 6 5 Beta
8 C 6 4 Beta
我想通过取长度值的平均值将数据集减少到包含Code的唯一值的数据集,但也保留所有字符串变量,即
Family Code Length Type
1 A 1 11 Alpha
2 A 3 8.5 Beta
3 B 4 7 Alpha
5 B 5 8 Alpha
6 C 6 3.67 Beta
我已经尝试过aggregate()和ddply()但是这些似乎用NA替换了字符串,而我正在努力找到解决这个问题的方法。
答案 0 :(得分:15)
由于Family
和Type
在Code
组中保持不变,因此您可以在使用ddply
时对其进行“分组”,而不会更改任何内容。如果您的原始数据集为dat
ddply(dat, .(Family, Code, Type), summarize, Length=mean(Length))
给出
Family Code Type Length
1 A 1 Alpha 11.000000
2 A 3 Beta 8.500000
3 B 4 Alpha 7.000000
4 B 5 Alpha 8.000000
5 C 6 Beta 3.666667
如果Family
和Type
在Code
组中不一致,那么您需要定义如何汇总/汇总这些值。在这个例子中,我只取一个唯一值:
ddply(dat, .(Code), summarize, Family=unique(Family),
Length=mean(Length), Type=unique(Type))
使用dplyr
的类似选项
library(dplyr)
dat %>%
group_by(Family, Code, Type) %>%
summarise(Length=mean(Length))
和
dat %>%
group_by(Code) %>%
summarise(Family=unique(Family), Length=mean(Length), Type=unique(Type))