【发布时间】:2017-07-06 10:31:09
【问题描述】:
您好,我需要为多列按组连接字符串。我知道这个问题的版本已经被问过好几次了(参见Aggregating by unique identifier and concatenating related values into a string),但它们通常涉及连接单个列的值。
我的数据集是这样的:
Sample group Gene1 Gene2 Gene3
A 1 a NA NA
A 2 b NA NA
B 1 NA c NA
C 1 a NA d
C 2 b NA e
C 3 c NA NA
我想把它变成每个样本只占用 1 行的格式(组列是可选的):
Sample group Gene1 Gene2 Gene3
A 1,2 a,b NA NA
B 1 NA c NA
C 1,2,3 a,b,c NA d,e
由于基因的数量可以达到数千,我不能简单地指定我希望连接的列。
我知道aggregate 或dplyr 可用于获取组,但我不知道如何为多个列执行此操作。
提前致谢!
编辑
由于我的数据集非常大,包含数千个基因,我意识到 dplyr 太慢了。我一直在试验data.table,下面的代码也能得到我想要的:
setDT(df)[, lapply(.SD, function(x) paste(na.omit(x), collapse = ",")), by = Sample]
现在的输出是:
Sample group Gene1 Gene2 Gene3
1: A 1,2 a,b
2: B 1 c
3: C 1,2,3 a,b,c d,e
感谢您的帮助!
【问题讨论】:
-
那些是
NAs 还是空字符串("")? -
感谢您的澄清。他们是 NAs
标签: r string data.table dplyr concatenation