将列中的唯一值聚合到单个数据帧" cell"

时间:2016-08-29 15:33:50

标签: r

你好,非常棒的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

我想知道是否有人知道连接此类信息的任何狡猾技巧?

2 个答案:

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

假设带有字符串的列类是字符而不是因素。