我有一项调查数据,其中有多种选择。因此,在一个单元格中,您有多个答案,并用列分隔。有很多问题,大多数都有很长的字符串答案。我想将单元格分成几列,其中变量名称是答案,值是 1 或 0,具体取决于答案是否包含它。
下面是一个简单问题的示例,具有非常简单的字符串和所需的结果。
data <- data.frame("v1" = c(c("apple, orange"),c("apple, melon"),c("banana")))
result <- data.frame("apple" = c(1,1,0),
"orange" = c(1,0,0),
"melon" = c(0,1,0),
"banana" = c(0,0,1))
我想整个过程应该是这样的:
这是我不完整的尝试,仅针对一个变量:
a <- strsplit(input$v1, split = ", ")
b <- # missing step
c <- unique(b)
c <- c("apple","orange","melon","banana") # manually for now
d <- as.character(unlist(c))
e <- data.frame(matrix(ncol = length(c), nrow = nrow(input)))
colnames(e) <- d
f <- cbind(input,e)
for (Variable in c) {
for (Value in d) {
input$Variable <- ifelse(grepl(Value,input$v1, fixed = TRUE),1,0)
}
}
input$v1 <- NULL
有什么建议吗?
library(qdapTools)
library(dplyr)
data |>
mutate(v1 = strsplit(v1, ", ")) |>
(\(x) mtabulate(x[["v1"]]))()
# apple banana melon orange
# 1 1 0 0 1
# 2 1 0 1 0
# 3 0 1 0 0