r - 如何将数据从长转换为宽并合并
问题描述
我是 R 的初学者,所以有一个非常基本的问题。
我想将数据库从长转换为宽。我还需要将一列与行的标题之一合并。原始数据将如下所示:
试用号 | 时间点 | 副作用1级 | 副作用2级 |
---|---|---|---|
1 | 6 | 0 | 1 |
1 | 12 | 3 | 2 |
1 | 24 | 2 | 0 |
2 | 3 | 1 | 2 |
2 | 6 | 1 | 3 |
2 | 24 | 2 | 0 |
我真正需要的是每个患者有 1 行,并且副作用标题与时间点合并,以这种方式组织:
试用号 | 副作用1grade_3 | 副作用1grade_6 | 副作用1grade_12 | 副作用1级_24 | 副作用2grade_3 | 副作用2grade_6 | 副作用2grade_12 | 副作用2grade_24 |
---|---|---|---|---|---|---|---|---|
1 | 0 | 3 | 2 | 1 | 2 | 0 | ||
2 | 1 | 1 | 2 | 2 | 3 | 0 |
有人能帮忙吗?我一直在阅读很多东西,但还没有真正走得更远。您的帮助将不胜感激。抱歉,如果这是一个初学者的问题。谢谢!
解决方案
df <- read.table(text = 'Trial_number timepoint side_effect1_grade side_effect2_grade
1 6 0 1
1 12 3 2
1 24 2 0
2 3 1 2
2 6 1 3
2 24 2 0', header = T)
df
#> Trial_number timepoint side_effect1_grade side_effect2_grade
#> 1 1 6 0 1
#> 2 1 12 3 2
#> 3 1 24 2 0
#> 4 2 3 1 2
#> 5 2 6 1 3
#> 6 2 24 2 0
library(tidyr, warn.conflicts = T)
df %>% pivot_wider(names_from = timepoint, values_from = c(side_effect1_grade, side_effect2_grade), names_sep = '_')
#> # A tibble: 2 x 9
#> Trial_number side_effect1_grade_6 side_effect1_grade_12 side_effect1_grade_24
#> <int> <int> <int> <int>
#> 1 1 0 3 2
#> 2 2 1 NA 2
#> # ... with 5 more variables: side_effect1_grade_3 <int>,
#> # side_effect2_grade_6 <int>, side_effect2_grade_12 <int>,
#> # side_effect2_grade_24 <int>, side_effect2_grade_3 <int>
由reprex 包于 2021-07-09 创建 (v2.0.0 )
推荐阅读
- python - Elastic Beanstalk 上 Django/Celery 的权限问题
- java - spring boot 并行传出请求的最佳实践是什么?
- android - 什么布局最好根据坐标设置其内部视图
- python - 如何在需要时退出循环?
- google-cloud-dataflow - BeamSQL 中是否有“LIKE”的解决方法?
- ios - Swift:完成关闭永远不会执行?
- python - 将列表分解为较小的重复元素列表,并保留原始顺序(Python)
- android - Xamarin.Android:CS0103 当前上下文中不存在名称“SetSupportActionBar”
- c++ - #ifdef 宏与 -Wpedantic 和“额外”分号
- validation - 如何将springboot验证器与freemarker一起使用?