我目前有一个数据框,看起来像这样:
census_2
# A tibble: 236,844 x 5
STATE RACE CENSUS2010POP POPESTIMATE2012
<chr> <dbl> <dbl> <dbl>
1 01 1 37991 37824
2 01 1 38150 38597
3 01 1 39738 37653
4 01 1 39827 38113
5 01 1 39353 39628
6 01 1 39520 39821
7 01 1 39813 39425
8 01 2 39695 39636
9 01 2 40012 39957
10 01 2 42073 39856
# … with 236,834 more rows, and 1 more variable:
# POPESTIMATE2016 <dbl>
“状态”列将是我要普遍分组的内容。我将在race列中有多行代表相同的值。CENSUS2010POP列是该州特定种族群体的人口普查估计值。
因此,我最终想要做的是为该州的每个种族群体的估计值提供一列。例如,在原始数据集中,州= 1&种族= 1是指州1中白人成分的总体。我想要的是汇总该状态下针对白人人口的观测值,并将该估计值转化为一列。然后,对于数据集中的第三列,我将获得该特定状态下非白人的人口估计值的总和,例如,它等于上述原始数据集中的RACE = 2。这是一个简单的示例:
STATE WHITE_CENSUS10POP NONWHITE_CENSUS10POP
1 = summation(nrow where state == 1 & race == 1) = summation(nrow where state == 1 & race == 2)
2. = summation(nrow where state == 2 & race == 1) = summation(nrow where state == 2 & race == 2)
3
4
5
6
...
50
有多种方法可以做到这一点。一个没有其他软件包依赖性的简单选项(假设只有两个“ race”)是对“ STATE”summarise
进行分组,并根据“ race”的值对“ CENSUS2010POP”进行子集化,从而获得两列,sum
。
library(dplyr)
df1 %>%
group_by(STATE) %>%
summarise(WHITE_CENSUS10POP = sum(CENSUS2010POP[race == 1]),
NONWHITE_CENUS10POP = sum(CENSUS2010POP[race == 2]),
.groups = 'drop')
一个更通用的选择是将sum
“ CENSUS2010POP”按“ STATE”,“ race”分组,然后将“ long”格式的数据旋转为“ wide”,pivot_wider
library(tidyr)
df1 %>%
group_by(STATE, race) %>%
summarise(value = sum(CENSUS2010POP), .groups = 'drop') %>%
pivot_wider(names_from = race, values_from = value)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句