如何解决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()
将此列。但是我不知道“插入”参数应该是什么,因为并非所有受访者都回答了相同数量的问题。
目标是拥有这样的数据框架(与持续时间无关,而与每个问卷中问题的位置有关):
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。