我正在尝试生成每个因子水平的加权和。我有四列数据:
col1 = surface area
col 2 = dominant
col 3 = codominant
col 4 = sub
1 2 3 4
125 A NA NA
130 A NA B
150 C B NA
160 B NA NA
90 B A NA
180 C A B
- 如果仅填充第 2 列,则该值获取第 1 列的全部量。
- 如果第 2 列和第 3 列被填充,则第 1 列中的值被分成两半。
- 如果填充了第 2、3 和 4 列,则第 1 列中的值将分成三部分。
- 如果第 2 列和第 4 列被填充,则第 1 列中的值除以 75/25。
因此,对于上面的示例输出,我的新数据框将是:
1 2
A 326.9
B 331.4
C 134.4
我摆弄了一下ifelse
并提出了类似的东西(对于这个例子的两列):
df1 <- df %>%
mutate(weighted_dominant = ifelse(!is.na(dominant) & is.na(codominant), Surface_Area,
Surface_Area/2),
weighted_codominant = ifelse(!is.na(codominant), Surface_Area/2, NA )
现在我隔离感兴趣的列:
df2 <- df1 %>% select(dominant, weighted_dominant) %>%
group by (dominant) %>%
summarise (sum = sum(weighted_dominant)
也对共显列执行此操作,绑定两个新数据帧的行并再次执行汇总功能。
这完成了工作,但也需要大约 50 行代码,在我看来,这不是很干净。
我的问题:有没有更好的(tidyverse)方法来做这种加权总结?