[英]Merge rows in one data.frame
This is a very similar question to merge-two-rows-in-one-dataframe but I have string variables and just want to collapse some rows that have the same country name. 这与将两行合一数据帧合并非常相似,但是我有字符串变量,只想折叠一些具有相同国家名称的行。 I adapted the MWER 我改编了MWER
data<-data.frame(code= c(345, 346), name= "Yemen", v1= c("", "text1"), v2= c("text2", ""),v3= c("text3", ""),v4= c("", "text4"))
code name v1 v2 v3 v4
345 Yemen text2 text3
346 Yemen text1 text4
aggregate(x=data[c("v1","v2","v3","v4")], by=list(name=data$name), paste)
name v1.1 v1.2 v2.1 v2.2 v3.1 v3.2 v4.1 v4.2
1 Yemen text1 text2 text3 text4
I was hoping paste would work as a function to combine the empthy cell with the text of the other row, but I somehow get one row with more variables v1.1 and so on. 我希望粘贴可以作为将empthy单元格与另一行的文本结合使用的函数,但是我不知何故获得了带有更多变量v1.1的一行,依此类推。
We could use data.table
. 我们可以使用data.table
。 We convert the 'data.frame' to 'data.table' ( setDT(data)
), grouped by 'name', we unlist
the columns specified in the .SDcols
, and paste
it together. 我们转换“data.frame”到“data.table”( setDT(data)
),由“名称”组合,我们unlist
在指定的列.SDcols
,并paste
一起。
library(data.table)
setDT(data)[, unlist(.SD), name, .SDcols=v1:v4][V1!='', paste(V1, collapse=', '), name]
As the expected output is not showed, it could be also 由于未显示预期输出,因此也可能是
setDT(data)[, lapply(.SD, function(x) paste(x[x!=''], collapse='')) , name, .SDcols= v1:v4]
Based on the expected output, we convert the 'factor' columns ('v1:v4') to 'character' class, then use the formula method of aggregate
and paste
the columns grouped by 'name'. 根据预期的输出,我们将'factor'列('v1:v4')转换为'character'类,然后使用aggregate
的公式方法并paste
按'name'分组的列。
data[3:6] <- lapply(data[3:6], as.character)
aggregate(.~name, data[-1], FUN=function(x) paste(x[x!=''], collapse=', '))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.