r - 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()
此列中使用分隔符“,”。但我不知道“into”参数应该是什么,因为并非所有受访者都回答了相同数量的问题。
目标是拥有这样的数据框(与持续时间无关,仅与每个问卷中问题的位置有关):
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
推荐阅读
- javascript - 如何清除谷歌地图标记?
- python - 聚类一些图形形式的矩阵
- xml - 使用 XmlDocument 类创建带有空格的 Xml 标记
- azure-storage - "CustomInputSchema" 不能与 EventGridSchema 的主题输入模式结合使用
- c - g_dbus_proxy_new_for_bus_sync:断言“g_variant_is_object_path(object_path)”失败
- python - AmbiguousForeignKeysError:无法确定之间的连接
- r - 比较 R 中的日期效果不佳(相等)
- vba - 如何使用 VBa 中的函数计算 Access 查询中的中位数
- ios - gRPC 中的 TLS 证书固定
- python - 带有字符数组的 Numpy ufunc.at