使用可变列数将长转换为宽 [英] Convert long to wide with variable number of columns
本文介绍了使用可变列数将长转换为宽的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
鉴于以下长格式的数据,我想创建一个宽数据集,每个 srdr_id 一行,每个 arm_name 单独列,如下所示.
Given the following data in long form, I would like to create a wide dataset with one row for each srdr_id, and a separate column for each arm_name as below.
所需的输出:
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))
按照第一个建议,我尝试了:
Following the first suggestion, I tried:
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
我想要转置版本.
推荐答案
我们可以通过 spread
ing id
和 arm_name
来改变@akrun 的建议,因为 id
是键"而 arm_name
是值":
We can change @akrun's suggestion by spread
ing id
and arm_name
, as id
is the "key" and arm_name
the "value":
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
这篇关于使用可变列数将长转换为宽的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文