Tidyr:将一列分成数量可变的列数量、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(variabl...

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

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)。

excel表找 某一列数据 约2000个 中有A数800个散在其中,望找排序在A数后面 相邻 的数.如何建立公式 谢谢

现在,我想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
阅读全文

相关推荐

最新文章