我可以聚合数据帧并在R中保留字符串变量吗?

R_u*_*usr 4 aggregate r plyr dataframe

我有一个表格的数据框:

  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
Run Code Online (Sandbox Code Playgroud)

我想通过取长度值的平均值将数据集减少到包含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
Run Code Online (Sandbox Code Playgroud)

我已经尝试过aggregate()和ddply(),但是这些似乎用NA替换了字符串,我正在努力找到解决这个问题的方法.

Bri*_*ggs 15

由于Family并且TypeCode组内是恒定的,因此您可以在不使用时更改任何内容的情况下对其进行"分组" ddply.如果您的原始数据集是dat

ddply(dat, .(Family, Code, Type), summarize, Length=mean(Length))
Run Code Online (Sandbox Code Playgroud)

  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
Run Code Online (Sandbox Code Playgroud)

如果FamilyType是不是常数的内Code群体,那么你就需要定义如何总结/聚合这些值.在这个例子中,我只取一个唯一值:

ddply(dat, .(Code), summarize, Family=unique(Family), 
  Length=mean(Length), Type=unique(Type))
Run Code Online (Sandbox Code Playgroud)

更新

使用的类似选项dplyr

 library(dplyr)
 dat %>% 
     group_by(Family, Code, Type) %>%
     summarise(Length=mean(Length))
Run Code Online (Sandbox Code Playgroud)

  dat %>%
     group_by(Code) %>%
     summarise(Family=unique(Family), Length=mean(Length), Type=unique(Type))
Run Code Online (Sandbox Code Playgroud)