在调查统计数据中,当允许对一个问题进行多个回答时,可以在单个列中记录多个回答标签。
在分析此类数据时,您可能希望在单独的列中存储多个响应,这就需要进行字符串拆分。
将以下代码作为示例运行。
smp <- data.frame(
x = c("1,2,3", "2,5,9", "1,5", "2,7,8,9,10")
)
smp
#> x
#> 1 1,2,3
#> 2 2,5,9
#> 3 1,5
#> 4 2,7,8,9,10
创建于2023年1月21日,使用reprex v2.0.2
在此数据中,每行表示不同响应者的响应,分析师知道总共有多少个选项,但不知道将选择哪些响应或选择多少响应。
将其适当划分的结果应如下所示
out <- data.frame(
d_1 = c(1,NA,1,NA),
d_2 = c(2,2,NA,2),
d_3 = c(3,NA,NA,NA),
d_4 = c(NA,NA,NA,NA),
d_5 = c(NA,5,5,NA),
d_6 = c(NA,NA,NA,NA),
d_7 = c(NA,NA,NA,7),
d_8 = c(NA,NA,NA,8),
d_9 = c(NA,9,NA,9),
d_10 = c(NA,NA,NA,10)
)
out
#> d_1 d_2 d_3 d_4 d_5 d_6 d_7 d_8 d_9 d_10
#> 1 1 2 3 NA NA NA NA NA NA NA
#> 2 NA 2 NA NA 5 NA NA NA 9 NA
#> 3 1 NA NA NA 5 NA NA NA NA NA
#> 4 NA 2 NA NA NA NA 7 8 9 10
创建于2023年1月21日,使用reprex v2.0.2
有什么好办法把数据整理成这个表格吗?
4条答案
按热度按时间vx6bjr1n1#
这个并不优雅的函数可以给予你预期的结果。
如果
smp
只包含一个名为x
的变量(如示例中所示),则此方法有效。fjnneemd2#
可能是真值表,以R为基
which(
提供了一个奇怪的、有点神秘的arr.ind = TRUE)
,它可能允许我们将值重新放回真值表中......我发现最简单的方法是先将其作为一个对象同时给出列和值,现在只是将它们重新插入的技术,其表示法现在使我的大脑出现了一个小问题。虽然
which(x arr.ind =TRUE)
非常值得注意,但我在这里的错误在于引入了“真值表”,而不是直接根据df填充char元素然后你就可以随意命名了。
bzzcjhmw3#
以下是
tidyverse
解决方案,其中使用了tidyverse
系列中的各种函数:dpiehjr44#
下面是另一种方法,其中我使用了连接
数据
编号
创建于2023年1月21日,使用reprex v2.0.2
输出