dplyr使用across对数据框不同列执行条件汇总逻辑错误如何解决
问题原因
你原有代码的判断逻辑错误根源在于:across()传入匿名函数的.指代的是当前遍历到的单列向量,不是整个数据框,因此names(.)无法获取当前列的名称,条件判断失效,导致所有列都执行了求和逻辑。
修正方案
使用dplyr内置的cur_column()函数获取当前遍历的列名做判断,同时显式指定weighted.mean的wt参数即可:
library(dplyr) dt <- data.frame(col0 = c(1,2,3), col1 = c(0.1,0.2,0.3), col2 = c(0.2,0.3,0.4), col3 = c(0.1,0.2,0.3), col4 = c(0.2,0.3,0.4)) dt %>% summarise(across(everything(), ~ if(cur_column() != "col0") { weighted.mean(x = ., wt = col0, na.rm = TRUE) } else { sum(., na.rm = TRUE) }))
运行结果
col0 col1 col2 col3 col4 1 6 0.2333333 0.3333333 0.2333333 0.3333333
内容的提问来源于stack exchange,提问作者Giorgio
相关产品推荐
相关产品推荐

