这是一种快速而肮脏的方法。我相信其他人会提出一个非常简单的单行方法。:)
IDstest <- c(1:5,5:1,3,4,1)
codestest <- c("X1","Z1","C1","X1","X2","J9","A","Y1","Z2","C5","A","P2","Z")
descriptiontest <- c("Desc 1","Desc 2","Test","Just typing randomly","Desc 4","Desc 5","Desc 1","Random","Desc ZZZ","Desc 1","YYY","XYZ","Desc 4")
df <- data.frame(IDstest, codestest, descriptiontest)
uniqueIDs <- unique(df[,"IDstest"])
mergedescription <- rep("", length(uniqueIDs))
for(i in uniqueIDs ) {
mergedescription[i] <- paste(df[IDstest == i, "descriptiontest"], collapse = "; ")
}
mdf <- data.frame(IDstest = uniqueIDs, mergedescription)
final.df <- merge(df, mdf)
这将按IDstest对记录进行排序,作为一种副作用:
IDstest codestest descriptiontest mergedescription
1 1 X1 Desc 1 Desc 1; Desc 1; Desc 4
2 1 C5 Desc 1 Desc 1; Desc 1; Desc 4
3 1 Z Desc 4 Desc 1; Desc 1; Desc 4
4 2 Z1 Desc 2 Desc 2; Desc ZZZ
5 2 Z2 Desc ZZZ Desc 2; Desc ZZZ
6 3 C1 Test Test; Random; YYY
7 3 Y1 Random Test; Random; YYY
8 3 A YYY Test; Random; YYY
9 4 X1 Just typing randomly Just typing randomly; Desc 1; XYZ
10 4 A Desc 1 Just typing randomly; Desc 1; XYZ
11 4 P2 XYZ Just typing randomly; Desc 1; XYZ
12 5 J9 Desc 5 Desc 4; Desc 5
13 5 X2 Desc 4 Desc 4; Desc 5