首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将R中的因子水平转换为变量?

如何将R中的因子水平转换为变量?
EN

Stack Overflow用户
提问于 2022-03-25 05:58:17
回答 1查看 105关注 0票数 0

我对R和试图建立一个人口金字塔相对来说是个新手。我需要在两个变量(popMale,pop女性)中同时提供男性和女性的人口数据。目前,性别是一个有两个层次的因素。如何将这两个因素级别转换为2个新变量(popMale,popFemale).我很感谢你的帮助。下面是我的数据的dput片段:

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

发布于 2022-03-25 07:29:06

由于您的数据包含第一行中的列名,因此实现您期望的结果的第一步是根据第一行命名数据,然后删除它。完成此操作后,将数据转换为长或整洁的格式,即使用例如tidyr::pivot_longer将年数和人口数移动到单独的列中。最后,您可以使用tidyr::pivot_wider将男性和女性的数据分散到单独的列中。

注意:根据您分析中的下一步步骤,最后一步并不是真正需要的,实际上可能会使绘制人口金字塔的工作更加复杂。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71612751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档