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
答案 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