簡體   English   中英

根據條件從匯總的列值創建新數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM