折叠数据框中的列 (R)

Tay*_*rer 4 r dataframe data.table

基本上,我有一个数据框,df

                  Beginning1 Protein2    Protein3    Protein4    Biomarker1
      Pathway3    A         G           NA           NA           F
      Pathway8    Z         G           NA           NA           E
      Pathway9    A         G           Z            H            F
      Pathway6    Y         G           Z            H            E
      Pathway2    A         G           D            NA           F
      Pathway5    Q         G           D            NA           E
      Pathway1    A         D           K            NA           F
      Pathway7    A         B           C            D            F
      Pathway4    V         B           C            D            E
Run Code Online (Sandbox Code Playgroud)

我想组合数据框,以便从“Protein2”到“Protein4”相同的那些行是浓缩的,给出以下内容:

            Beginning1 Protein2     Protein3     Protein4     Biomarker1
Pathway3    A,Z         G           NA           NA           F,E
Pathway9    A,Y         G           Z            H            F,E
Pathway2    A,Q         G           D            NA           F,E
Pathway1    A           D           K            NA           F
Pathway7    A,V         B           C            D            F,E
Run Code Online (Sandbox Code Playgroud)

这与我之前提出的问题(合并数据帧中的重复行)非常相似,但不同之处在于我还合并了“Beginning1”行。

到目前为止,我已经尝试过:

library(dat.table)
dat<-data.table(df)

Total_collapse <- dat[, .(
Biomarker1 = paste0(Biomarker1, collapse = ", ")),
by = .(Beginning1, Protein1, Protein2, Protein3)]

Total_collapse <- dat[, .(
Beginning1 = paste0(Beginning1, collapse = ", ")),
by = .(Protein1, Protein2, Protein3)]
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

            Beginning1  Protein2    Protein3      Protein4      Biomarker1
Pathway3    G           NA           NA           F,E
Pathway9    G           Z            H            F,E
Pathway2    G           D            NA           F,E
Pathway1    D           K            NA           F
Pathway7    B           C            D            F,E
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?我还尝试将解决方案从Collapse/concatenate/aggregate a column复制到每个 group 中的单个逗号分隔字符串,但没有成功。

如果这是一个简单的错误,我很抱歉 - 我对 R 很陌生。

MrF*_*ick 5

这是一个可能的解决方案,使用 dplyr

df %>% group_by_at(vars(Protein2:Protein4)) %>%
  summarize_all(paste, collapse=",")
Run Code Online (Sandbox Code Playgroud)