我希望这个问题不会经常被问到(第一次用户)。
我有一个名为data2003的数据框,为简单起见,我会说它看起来像这样:
ID Weight North South
1 0.5 1 0
2 0.7 0 1
3 1.0 0 1
4 1.4 0 1
5 .95 1 0
6 1.1 1 0
我想在权数列中添加与北和南虚拟变量相对应的值,因此,当同一行的北值是1时,仅在计数中包括权重。
我所做的是为北方和南方制作子集:
subset2003N <- subset(data2003, data2003$North == 1 )
sum2003N <-sum(subset2003N$Weight)
问题是我有6个区域,而不仅仅是北部和南部,还有另外两年的数据集。有没有一种方法可以在一行代码中简单地做到这一点,而又不会使我的全局环境充满这么多子集?
如果North
和South
是互斥的,则最好将它们作为一列。您可以在这里使用reshape2和dplyr帮助您:
library(reshape2)
library(dplyr)
melt(data2003, c("ID", "Weight")) %>%
filter(value == 1) %>%
group_by(variable) %>%
summarize(Weight = sum(Weight))
#> # A tibble: 2 x 2
#> variable Weight
#> <fct> <dbl>
#> 1 North 2.55
#> 2 South 3.10