连接具有相同行名称的列

时间:2016-06-03 14:23:35

标签: r

我想知道是否有一个函数来查找某个名称的列,然后将它们连接在一起,例如:

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 = ",")

2 个答案:

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

我们可以将applyMARGIN=1

一起使用
apply(df[-1], 1,  FUN = paste, collapse=",")
#[1] "1,2,4,5,6,7"