总结if条件下的逻辑语句
Summarise logical statement in if condition
我有一个数据框,其中包含一个名为 'col0' 的列和多个(超过 100 个)其他列(col1、col2、col3...)。我试图用 dplyr 有条件地总结它们(col0 和 weighted.mean 的总和)但它不起作用,因为它总结了列中的所有值。
我假设 if 语句后有偏差。
代码:
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(any(names(.) != "col0"))
weighted.mean(., col0, na.rm = TRUE)
else sum(., na.rm = TRUE)))
结果:
col0 col1 col2 col3 col4
1 6 0.6 0.9 0.6 0.9
注意:Ronak Shah 建议的解决方案是正确的,但(无论出于何种原因)我必须在 weighted.mean 函数
中明确定义 wt
您可以使用 cur_column()
获取列名。
library(dplyr)
dt %>%
summarise(across(everything(), ~ if(cur_column() != 'col0')
weighted.mean(., col0, na.rm = TRUE)
else sum(., na.rm = TRUE)))
# col0 col1 col2 col3 col4
#1 6 0.2333333 0.3333333 0.2333333 0.3333333
另一种方法是单独为 col0
应用函数。
dt %>%
summarise(across(-col0, weighted.mean, col0, na.rm = TRUE),
col0 = sum(col0))
我有一个数据框,其中包含一个名为 'col0' 的列和多个(超过 100 个)其他列(col1、col2、col3...)。我试图用 dplyr 有条件地总结它们(col0 和 weighted.mean 的总和)但它不起作用,因为它总结了列中的所有值。
我假设 if 语句后有偏差。
代码:
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(any(names(.) != "col0"))
weighted.mean(., col0, na.rm = TRUE)
else sum(., na.rm = TRUE)))
结果:
col0 col1 col2 col3 col4
1 6 0.6 0.9 0.6 0.9
注意:Ronak Shah 建议的解决方案是正确的,但(无论出于何种原因)我必须在 weighted.mean 函数
中明确定义 wt您可以使用 cur_column()
获取列名。
library(dplyr)
dt %>%
summarise(across(everything(), ~ if(cur_column() != 'col0')
weighted.mean(., col0, na.rm = TRUE)
else sum(., na.rm = TRUE)))
# col0 col1 col2 col3 col4
#1 6 0.2333333 0.3333333 0.2333333 0.3333333
另一种方法是单独为 col0
应用函数。
dt %>%
summarise(across(-col0, weighted.mean, col0, na.rm = TRUE),
col0 = sum(col0))