Tidyr:将一列分成数量可变的列 [英] tidyr: Separate a column into a variable number of columns

查看:0
本文介绍了Tidyr:将一列分成数量可变的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据框中有一个变量,它包含回答调查问卷中不同问题的长度。数据结构如下:

data <- data.frame(variables = c("q1:2,q2:3,q3:4,q4:10,q5:1",
                                 "q2:3,q1:2,q3:2,q5:2,q4:9",
                                 "q1:1,q2:4,q5:8"))
        separate(variables, sep=",", into=??)

q1:2表示此受访者需要2秒钟才能回答问题1(Q1)。

现在,我想separate()本专栏使用分隔符";,";。但我不知道&to-quot;参数应该是什么,因为并非所有受访者都回答了相同数量的问题。

我们的目标是建立这样的数据框架(它不是关于持续时间的,而是关于每个调查问卷中问题的位置):

pos_q1 pos_q2 pos_q3 pos_q4 pos_q5
----------------------------------
     1      2      3      4      5
     2      1      3      5      4
     1      2     NA     NA      3          

有人能帮忙吗?谢谢!

推荐答案

您可以先使用separate_rows获取长格式的数据,然后separate放到不同的列中,为每一行创建一个行号列并获取宽格式的数据。

library(dplyr)
library(tidyr)

data %>%
  mutate(id = row_number()) %>%
  separate_rows(variables, sep = ',') %>%
  separate(variables, c('question', 'time'), sep = ':') %>%
  group_by(id) %>%
  mutate(time = row_number()) %>%
  ungroup %>%
  pivot_wider(names_from = question,values_from=time, names_prefix = 'pos_') %>%
  select(-id)

# A tibble: 3 x 5
#  pos_q1 pos_q2 pos_q3 pos_q4 pos_q5
#   <int>  <int>  <int>  <int>  <int>
#1      1      2      3      4      5
#2      2      1      3      5      4
#3      1      2     NA     NA      3

这篇关于Tidyr:将一列分成数量可变的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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