如何解决如何通过从R中的列名生成键来枢转/聚集多个组/对列?
我有以下数据集
grade9_math_zscore <- rnorm(10,1)
grade9_science_zscore <- rnorm(10,1)
grade10_math_zscore <- rnorm(10,1)
grade10_science_zscore <- rnorm(10,1)
grade9_math_passed_lab<- sample(0:1,10,replace=TRUE)
grade10_math_passed_lab<- sample(0:1,replace=TRUE)
grade9_science_passed_lab<- sample(0:1,replace=TRUE)
grade10_science_passed_lab<- sample(0:1,replace=TRUE)
grade9_math_used_comp <- sample(0:1,replace=TRUE)
grade10_math_used_comp <- sample(0:1,replace=TRUE)
grade9_science_used_comp <- sample(0:1,replace=TRUE)
grade10_science_used_comp <- sample(0:1,replace=TRUE)
students<-as.data.frame(cbind(grade9_math_zscore,grade9_science_zscore,grade10_math_zscore,grade10_science_zscore,grade9_math_passed_lab,grade10_math_passed_lab,grade9_science_passed_lab,grade10_science_passed_lab,grade9_math_used_comp,grade10_math_used_comp,grade9_science_used_comp,grade10_science_used_comp ))
grade course z_score passed_lab used_comp
1 9 math -0.287118228740724 0 0
2 9 science 0.421672812450803 0 0
3 10 math 1.66175637068003 1 1
4 10 science -0.000352193924396851 0 1
我一直在尝试从R上pivot_longer
的{{1}}那里获得这个。我主要需要弄清楚dplyr
选项的帮助。另外,我似乎无法在一个命令中names_pattern
(用dplyr表示)所有三列gather
。
任何编码解决方案或仅建议是值得赞赏的。不使用dplyr的任何解决方案也将受到赞赏。
解决方法
使用pivot_longer
,您可以执行以下操作:
tidyr::pivot_longer(students,cols = everything(),names_to = c('grade','course','.value'),names_pattern = 'grade(\\d+)_(.*?)_(.*)')
# A tibble: 40 x 5
# grade course zscore passed_lab used_comp
# <chr> <chr> <dbl> <int> <int>
# 1 9 math -1.04 0 1
# 2 9 science 0.608 0 0
# 3 10 math 1.27 0 1
# 4 10 science 1.38 1 1
# 5 9 math -1.30 1 1
# 6 9 science 0.582 1 1
# 7 10 math -0.196 1 1
# 8 10 science -0.198 0 1
# 9 9 math -1.28 1 1
#10 9 science 2.05 0 0
# … with 30 more rows
数据
不要cbind
,然后添加as.data.frame
,直接使用data.frame
来构造数据框。
students<-data.frame(grade9_math_zscore,grade9_science_zscore....)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。