我想知道是否有一个函数来查找某个名称的列,然后将它们连接在一起,例如:
ID Code1 Code2 Code3
1 1,2 4,5 6,7
到
ID Codes
1 1,2,4,5,6,7
"代码的数量"列可以更改,所以我需要一些方法将它放入寻找这些列的循环中。我尝试过做这样的事情,但它似乎并没有给出正确的结果。可能是因为我加载了data.table包?:
codeCols = which(grepl('Code', names(df), ignore.case = TRUE))
df$Codes <- paste0(merged.data.frame[, codeCols],collapse = ",")
答案 0 :(得分:2)
如果您使用data.table
,我们可以尝试Reduce
:
library(data.table)
cols = grep('Code', names(df), ignore.case = TRUE, value = T)
setDT(df)[, .(Codes = Reduce(function(x,y) paste(x, y, sep = ","), .SD)),
by = list(ID), .SDcols = cols]
ID Codes
1: 1 1,2,4,5,6,7
在data.frame
:
Reduce(function(x,y) paste(x,y,sep=","), df[, cols])
[1] "1,2,4,5,6,7"
或
dt <- setDT(df)
Reduce(function(x,y) paste(x,y,sep=","), dt[, cols, with=F])
[1] "1,2,4,5,6,7"
<强>更新强>:
如果ID
列对于每一行都是唯一的,则可以如下消除Reduce函数的使用:
setDT(df)[, .(Codes = paste0(unlist(.SD), collapse = ",")), by = list(ID), .SDcols = cols]
答案 1 :(得分:0)
我们可以将apply
与MARGIN=1
apply(df[-1], 1, FUN = paste, collapse=",")
#[1] "1,2,4,5,6,7"