如何合并数据帧中的行,使R中的每个唯一id都有一行

如何合并数据帧中的行,使R中的每个唯一id都有一行,r,R,我创建了一个带有排名变量的数据集,如下所示: 我想通过UniqueID和Predictor列合并rank1、rank2和rank3值,以便数据集看起来如下所示: 我对如何在R中执行这一点有点迷茫。我尝试使用聚合和group_by函数,但我无法实现所需的输出。有没有办法在R中获得我想要的输出?在此方面的任何帮助都将不胜感激 假设如果存在大于0的值,我们需要忽略0,在按“UniqueID”、“Predictor”分组后,使用汇总所有并指定条件,如果所有值为0,则返回0,否则返回非0的值 libr

我创建了一个带有排名变量的数据集,如下所示:

我想通过UniqueID和Predictor列合并rank1、rank2和rank3值,以便数据集看起来如下所示:


我对如何在R中执行这一点有点迷茫。我尝试使用聚合和group_by函数,但我无法实现所需的输出。有没有办法在R中获得我想要的输出?在此方面的任何帮助都将不胜感激

假设如果存在大于0的值,我们需要忽略0,在按“UniqueID”、“Predictor”分组后,使用
汇总所有
并指定条件,如果
所有
值为0,则返回0,否则返回非0的值

library(dplyr)
df1 %>%
    group_by(UniqueID, Predictor) %>%
    summarise_all(funs(if(all(.==0)) 0L else as.integer(.[.!=0])))
# A tibble: 3 x 5
# Groups: UniqueID [?]
#  UniqueID Predictor rank1 rank2 rank3
#  <chr>    <chr>     <int> <int> <int>
#1 ID1      1             2     1     0
#2 ID2      1             1     0     1
#3 ID3      0             1     0     0
数据
df1尝试
library(dplyr);df1%>%groupby(UniqueID,Predictor)%>%summary\u all(funs(if(all(.==0))0 else.[!=0])
我尝试过,但出现了以下错误:“summary\u impl(.data,dots)中的错误:需要一个值。”此外,在某些情况下,每个唯一ID可能有两行以上的行,所有列组的值范围为0,1,2,3.@adda.fuentes请在我显示的数据上尝试。您只发布了示例数据的图像。看起来您有多个唯一值,而不是0。在这种情况下,您可能需要
toString(unique(.!=0])
@adda.fuentes更新帖子时考虑到了这一点
df1 %>%
    group_by(UniqueID, Predictor) %>%
    summarise_all(funs(if(all(.==0)) "0" else toString(unique(.[.!=0]))))
df1 <- data.frame(UniqueID = c('ID1', 'ID1', 'ID2', 'ID2', 'ID3'),
   Predictor = c('1', '1', '1', '1', '0'), rank1 = c(0, 2, 0, 1, 1),
     rank2 = c(1, 0, 0, 0, 0), rank3 = c(0, 0, 1, 0, 0),
stringsAsFactors = FALSE)