【问题标题】:Splitting up a column into multiple columns in r在r中将一列拆分为多列
【发布时间】:2019-07-25 08:49:32
【问题描述】:

我正在尝试整理 14 年来按性别划分的不同年级的不同学科的学生人数的一些数据。

我不确定要使用什么 dplyr 函数,因为我不想将观察变量命名为我想将它们分组并将它们放入变量中。

Row Labels    Year   students 
Biology       2004   26252
Female        2004   16091 
Year 9        2004   40
Year 10       2004   1857
Year 11       2004   8807
Year 12       2004   5386
Year 13       2004   1
Male          2004   10161
Year 9        2004   382
Year 10       2004   1301
Year 11       2004   5062
Year 12       2004   3118
Year 13       2004   298
Biotechnology 2004   2682
Female        2004   1257

我希望它看起来像这样,一列是性别,另一列是学科,另一列是年级。

Subject          Gender    Year  Year level  students
Biology          Female    2004  Year 9       16091
Biotechnology    Female    2004  Year 10      1257

df <- structure(list(`Row Labels` = c("Biology", "Female", "Year 9", 
"Year 10", "Year 11", "Year 12", "Year 13", "Male", "Year 9", 
"Year 10", "Year 11", "Year 12", "Year 13", "Biotechnology", 
"Female"), Year = c(2004, 2004, 2004, 2004, 2004, 2004, 2004, 
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004), students = c(26252, 
16091, 40, 1857, 8807, 5386, 1, 10161, 382, 1301, 5062, 3118, 
298, 2682, 1257)), row.names = c(NA, -15L), class = c("tbl_df", 
"tbl", "data.frame"))

【问题讨论】:

  • 您可以使用dput 在此处粘贴数据吗? (只需执行dput(df),其中 df 是您的数据)。那我给你一个答案!

标签: r dplyr tidyverse tidyr


【解决方案1】:

这可以解决问题,但您必须手动指定数据集中的所有 subjects

library(tidyr)
library(dplyr)

subjects <- c("Biology", "Biotechnology")

df %>% 
  mutate(
    Subject = if_else(`Row Labels` %in% subjects, `Row Labels`, NA_character_),
    Gender = if_else(`Row Labels` %in% c("Male", "Female"), `Row Labels`, NA_character_)
  ) %>% 
  fill(Subject, Gender) %>% 
  filter(`Row Labels` != Subject, `Row Labels` != Gender) %>% 
  select(Subject, Gender, Year, `Year level` = `Row Labels`, students)

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 2017-03-29
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2013-01-23
    相关资源
    最近更新 更多