通过对行进行分组来转换数据帧

时间:2013-12-13 20:32:59

标签: r dataframe

d1 <- data.frame(Gender=c('M', 'M', 'M', 'M', 'F', 'F', 'F','F'), Age=c(15,38,17,35,26,24,20,26))

如果可能的话,我想把它变成这样:

Gender Age
  M    15, 38, 17, 35
  F    26, 24, 20, 26

3 个答案:

答案 0 :(得分:3)

如果你只想显示这个,我建议不要“改变它”,你可以这样做:

 with(d1, aggregate(Age, list(Gender=Gender), list) )
  Gender              x
1      F 26, 24, 20, 26
2      M 15, 38, 17, 35

我注意到@Henrik删除了他使用aggregate.formula的答案,也许是因为我的答案很不幸,因为我打算删除我的答案。这是他写的,我认为它比我的好:

aggregate(Age ~ Gender, data = d1, function(x) paste(x, collapse = ", "))

但请注意,这个和之前接受的答案都会将这些年龄变量作为因素返回。

答案 1 :(得分:2)

您可以按性别分组,然后合并到您的字符串中,最后合并:

spl = split(d1, d1$Gender)
spl = lapply(spl, function(x) data.frame(Gender=x$Gender[1],
                                         Age=paste(x$Age, collapse=", ")))
result = do.call(rbind, spl)

答案 2 :(得分:1)

我将添加必要的基于plyr的解决方案:

library("plyr")
ddply(d1, .(Gender), summarize, Age = paste(Age, collapse = ", "))
##   Gender            Age
## 1      F 26, 24, 20, 26
## 2      M 15, 38, 17, 35