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