[英]How to recode categorical variable with multiple response combinations in r?
我是堆栈溢出的新手,找不到我的问题的答案。 我真的很感激任何输入!
我有一个正在整理的数据集。 我想将具有 202 列的变量重新编码为具有二进制值的表。 它来自“选中所有适用项”调查。 调查中的 output 如下所示:
Participant Language
1 'English|French'
2 'English'
3 'Spanish|French'
4 'English|Spanish'
5 'French'
变量 output 的语言由“|”分隔所以不能在这里做一张桌子。 我希望结果看起来像这样:
参与者 | 英语 | 法语 | 西班牙语 |
---|---|---|---|
1个 | 1个 | 1个 | 0 |
2个 | 1个 | 0 | 0 |
3个 | 0 | 1个 | 1个 |
4个 | 1个 | 0 | 1个 |
5个 | 0 | 1个 | 0 |
我不确定如何在不使用 '''ifelse''' 并为每种可能的语言组合创建 '''or''' arguments 的情况下执行此操作。 我真的很感激任何提示!
注意:实际数据集不关注语言,但格式相同。 有超过 3 种选择,所以我希望找到一种有效的方法来做到这一点
使用tidyverse
,您可以尝试以下操作。 使用separate_rows
您可以为每种语言添加行。 然后,添加一个临时列以指示 1 何时为参与者提供语言。 最后, pivot_wider
会将结果放入所需的格式。
library(tidyverse)
df %>%
separate_rows(Language) %>%
mutate(Present = 1) %>%
pivot_wider(id_cols = Participant,
names_from = Language,
values_from = Present,
values_fill = 0)
Output
Participant English French Spanish
<int> <dbl> <dbl> <dbl>
1 1 1 1 0
2 2 1 0 0
3 3 0 1 1
4 4 1 0 1
5 5 0 1 0
您需要先定义所需的列。 您可以手动执行此操作:
cols <- c("English", "French", "Spanish")
或自动化:
cols <- unique(unlist(strsplit(df$Language, "\\|")))
cols
#> [1] "English" "French" "Spanish"
在任何一种情况下,您的结果都可以这样获得:
cbind(df[1], setNames(as.data.frame(lapply(cols, function(x) {
as.numeric(grepl(x, df$Language))
})), cols))
#> Participant English French Spanish
#> 1 1 1 1 0
#> 2 2 1 0 0
#> 3 3 0 1 1
#> 4 4 1 0 1
#> 5 5 0 1 0
由reprex package (v2.0.1) 创建于 2022-03-13
数据
df <- structure(list(Participant = 1:5, Language = c("English|French",
"English", "Spanish|French", "English|Spanish", "French")),
class = "data.frame", row.names = c(NA, -5L))
df
#> Participant Language
#> 1 1 English|French
#> 2 2 English
#> 3 3 Spanish|French
#> 4 4 English|Spanish
#> 5 5 French
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.