簡體   English   中英

如何將因子水平轉換為 R 中的變量?

[英]How do I convert factor levels to variables in R?

我對 R 比較陌生,正在嘗試建立人口金字塔。 我需要在兩個變量(popMale,pop female)中並排獲得男性和女性的人口數據。 目前 Sex 是一個有 2 個級別的因素。 如何將這些 2 因子水平轉換為 2 個新變量(popMale、popFemale)。 我將不勝感激任何幫助。 這是我的數據的一個 dput 片段:

structure(list(V1 = c("Location", "Dominican Republic", "Dominican Republic", 
"Dominican Republic", "Dominican Republic"), V2 = c("Sex", "Female", 
"Female", "Male", "Male"), V3 = c("Age", "0-4", "5-9", "0-4", 
"5-9"), V4 = c(1950L, 217L, 164L, 223L, 167L), V5 = c(1955L, 
277L, 199L, 286L, 204L)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -5L))

由於您的數據包含第一行中的列名,因此獲得所需結果的第一步是根據第一行命名您的數據,然后將其刪除。 這樣做之后,將您的數據轉換為長格式或整潔格式,即使用tidyr::pivot_longer將年份和人口數量移動到單獨的列中。 最后,您可以使用tidyr::pivot_wider在單獨的列中傳播男性和女性的數據。

注意:根據分析中的后續步驟,最后一步並不是真正需要的,實際上可能會使繪制人口金字塔復雜化。

names(df) <- as.character(df[1,])
df <- df[-1,]

library(tidyr) 

df %>% 
  pivot_longer(matches("^\\d+"), names_to = "Year", values_to = "pop") %>% 
  pivot_wider(names_from = Sex, values_from = pop, names_glue = "pop{Sex}")
#> # A tibble: 4 × 5
#>   Location           Age   Year  popFemale popMale
#>   <chr>              <chr> <chr>     <int>   <int>
#> 1 Dominican Republic 0-4   1950        217     223
#> 2 Dominican Republic 0-4   1955        277     286
#> 3 Dominican Republic 5-9   1950        164     167
#> 4 Dominican Republic 5-9   1955        199     204

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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