给出以下长格式的数据,我想创建一个宽数据集,其中每个 srdr_id 一行,并为每个 arm_name 单独创建一个列,如下所示。
所需的输出
srdr_id c1 c2 c3
174212 TAU MI MI
172612 TAU MI
我尝试tidyr :: spread()失败。
dat <- structure(list(srdr_id = c("174212", "174212", "174212", "172612",
"172612"), arm_name = c("TAU", "MI", "MI", "TAU", "MI")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -5L))
根据第一个建议,我尝试了:
dat %>% group_by(srdr_id) %>% mutate(rn = row_number()) %>% spread(srdr_id, arm_name)
结果:
m 172612 174212
1 TAU TAU
2 MI MI
3 NA MI
我想要换位的版本。
答案 0 :(得分:1)
我们可以通过spread
id
和arm_name
来更改@akrun的建议,因为id
是“关键字”,arm_name
是“值”:
library(dplyr)
library(tidyr)
dat %>%
group_by(srdr_id) %>%
mutate(id = paste0("c", row_number())) %>%
spread(id, arm_name)
输出:
# A tibble: 2 x 4
# Groups: srdr_id [2]
srdr_id c1 c2 c3
<chr> <chr> <chr> <chr>
1 172612 TAU MI <NA>
2 174212 TAU MI MI