你好,非常棒的stackoverflow,
我有一个像这样结构化的数据框。
Person Dilution Analyte Meta#1 Meta#2
john 1 Blank 3x 100
john 2 Blank 3x 100
john 1 mulv 3x 100
john 2 mulv 3x 100
john 1 gp41 3x 100
john 2 gp41 3x 100
kelly 20 blank 3x 100
kelly 20 gp41 3x 100
可能有许多人,有许多不同的稀释液和分析物。列信息将始终与列中的元信息相同。我想生成以下数据框:
Person Dilution Analyte Meta#1 Meta#2
john 1,2 Blank,mulv,gp41 3x 100
kelly 20 blank,gp41 3x 100
我想知道是否有人知道连接此类信息的任何狡猾技巧?
答案 0 :(得分:2)
我更改了两个列名,因为#
不是R数据框列名中的合法字符。
dplyr
包library(dplyr)
df %>%
group_by(Person) %>%
summarise_all(funs(paste(unique(.), collapse=",")))
Person Dilution Analyte Meta1 Meta2 1 john 1,2 Blank,mulv,gp41 3x 100 2 kelly 20 blank,gp41 3x 100
data.table
包library(data.table)
setDT(df)[, lapply(.SD, function(x) paste(unique(x), collapse=",")), by=Person]
答案 1 :(得分:1)
Base R
解决方案将使用aggregate
。
aggregate(.~Person, df, function(x) as.character(unique(x)))
# Person Dilution Analyte Meta1 Meta2
#1 john 1, 2 Blank, mulv, gp41 3x 100
#2 kelly 20 blank, gp41 3x 100
同样,
aggregate(.~Person, df, function(x) toString(unique(x)))
假设带有字符串的列类是字符而不是因素。