使用可变列数将长转换为宽 [英] Convert long to wide with variable number of columns

查看:31
本文介绍了使用可变列数将长转换为宽的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

鉴于以下长格式的数据,我想创建一个宽数据集,每个 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

我想要转置版本.

推荐答案

我们可以通过 spreading idarm_name 来改变@akrun 的建议,因为 id 是键"而 arm_name 是值":

We can change @akrun's suggestion by spreading 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆