[英]Create new data frame from summed column values based on conditions
我目前有一個如下所示的數據框:
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>
State 列將成為我想要普遍分組的內容。 我將有多行代表種族列中的相同值。 CENSUS2010POP 列是該特定州中該特定種族群體的人口普查估計數。
所以,我最終想要做的是為整個州的每個種族群體人口估計數列一欄。 例如,在原始數據集中,state = 1 & Race = 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
有多種方法可以做到這一點。 一個沒有其他包依賴項的簡單選項(假設只有兩個“種族”)是在“狀態”上進行分組,並根據“種族”的值對“CENSUS2010POP”進行子集設置,然后用兩列summarise
並得到sum
。
library(dplyr)
df1 %>%
group_by(STATE) %>%
summarise(WHITE_CENSUS10POP = sum(CENSUS2010POP[race == 1]),
NONWHITE_CENUS10POP = sum(CENSUS2010POP[race == 2]),
.groups = 'drop')
更通用的選項是獲取按“STATE”、“race”分組的“CENSUS2010POP”的sum
,然后使用pivot_wider
將“long”格式數據轉為“wide”
library(tidyr)
df1 %>%
group_by(STATE, race) %>%
summarise(value = sum(CENSUS2010POP), .groups = 'drop') %>%
pivot_wider(names_from = race, values_from = value)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.