按决策组匹配特定选民投票结果的R语言高效实现问题
求助:50万+观测值的高效投票一致性判断方案
我手头有个记录选民投票情况的数据集,具体结构和生成代码如下:
d <- c(1,1,1,1,2,2,2,2,3,3,3,4,4,4,4) v <- c(6,7,8,9,6,7,8,9,6,7,9,6,7,8,9) r <- c("y","y","n","n","n","n","n","n","y","y","y","y","y","a","y") df <- data.frame(d,v,r)
这里要说明的是,部分选民并没有参与全部决策的投票——注意这和数据里已经记录的弃权票是完全不同的情况哦。
我的核心需求是:按决策d分组,判断每个选民的投票结果是否和特定选民v==8的投票一致。
最开始我用dplyr写了常规的处理代码:
df %>% group_by(d) %>% mutate(like8 = ifelse(r == r[v == 8], 1, 0))
但问题来了:v==8并不是在所有决策d里都有投票记录,执行这段代码直接抛出错误:
Error in mutate_impl(.data, dots) : Column
like8must be length 3 (the group size) or one, not 0
我自己折腾出了嵌套循环加ifelse的代码来绕开这个问题,但实际数据集有50万+观测值,运行速度慢到离谱,完全没法用。我知道data.table在处理大数据量的时候效率很高,但对它的用法不太熟,有没有大佬能给出适配这个场景的高效解决方案呀?
内容的提问来源于stack exchange,提问作者Etchr
相关产品推荐
相关产品推荐

