【发布时间】:2021-09-28 09:50:27
【问题描述】:
问题
我试图按组对数据帧中的每一列求和,如果总和不为 0,则将值设置为 1。我尝试使用 max 函数而不是组合(sum & ifelse),但我一直得到 Inf价值观。但是,该组合需要花费太多时间来计算,我有 150 万行和 500 个虚拟变量要汇总。
有没有更好的方法来实现这一点?
示例数据集
library(tidyverse)
library(tibble)
library(data.table)
rename <- dplyr::rename
select <- dplyr::select
set.seed(10002)
id <- sample(1:20, 1000, replace=T)
set.seed(10003)
group1 <- sample(0:1, 1000, replace=T)
set.seed(10004)
group2 <- sample(0:1, 1000, replace=T)
dummies <-
data.frame(id, group1, group2)
当前方法
# I am trying to sum each column in a data frame by group and
# set the value as 1 if the sum is not 0.
dummies %>%
ddply('id', function(x){
x %>%
select_if(is.numeric) %>%
summarise_each(list(sum)) %>%
mutate_if(is.numeric, ~ifelse(.x > 0,1,.x))
}, .progress = 'text') # It takes too much time
【问题讨论】:
-
我认为您可以切换到 dplyr 而不是 dplyr + plyr 即
dummies %>% group_by(id) %>% select(where(is.numeric)) %>% dplyr::summarise(across(everything(), ~ +(sum(., na.rm = TRUE) > 0)))