我创建了一个包含等级变量的数据集,如下所示:
我想将rank1,rank2和rank3值合并为UniqueID和Predictor列,以便数据集如下所示:
我有点迷失在如何在R中执行此操作。我尝试使用聚合和group_by函数,但我无法实现我想要的输出。有没有办法在R中获得我想要的输出?任何有关这方面的帮助将不胜感激。
答案 0 :(得分:2)
假设我们需要忽略0,如果有大于0的值,在按'UniqueID','Predictor'分组后,使用summarise_all
并指定条件,如果值all
则返回0为0或else
返回非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
注意:假设每个'UniqueID'不超过2行。如果有多个唯一元素而不是0,请将其放在list
或paste
中以创建字符串
如果有多个唯一值而不是0
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)