this question has answer here:
how aggregate data frame group in column group , collapse text in column text?
sample data:
df <- read.table(header=t, text=" group text a1 a2 a3 b b1 b b2 c c1 c c2 c c3 ") required output (data frame):
group text a1a2a3 b b1b2 c c1c2c3 now have:
sapply(unique(df$group), function(x) { paste0(df[df$group==x,"text"], collapse='') }) this works extent returns text collapsed group, vector:
[1] "a1a2a3" "b1b2" "c1c2c3" i need data frame group column result.
simply use aggregate :
aggregate(df$text, list(df$group), paste, collapse="") ## group.1 x ## 1 a1a2a3 ## 2 b b1b2 ## 3 c c1c2c3 or plyr
library(plyr) ddply(df, .(group), summarize, text=paste(text, collapse="")) ## group text ## 1 a1a2a3 ## 2 b b1b2 ## 3 c c1c2c3 ddply faster aggregate if have large dataset.
edit : suggestion @sedur :
aggregate(text ~ group, data = df, fun = paste, collapse = "") ## group text ## 1 a1a2a3 ## 2 b b1b2 ## 3 c c1c2c3 for same result earlier method have :
aggregate(x=list(text=df$text), by=list(group=df$group), paste, collapse="") edit2 : data.table :
library("data.table") dt <- as.data.table(df) dt[, list(text = paste(text, collapse="")), = group] ## group text ## 1: a1a2a3 ## 2: b b1b2 ## 3: c c1c2c3
Comments
Post a Comment