Tidyr:将一列分成数量可变的列 [英] tidyr: Separate a column into a variable number of columns
本文介绍了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屋!
查看全文