我可以给你两个想法,可能对你提到的两个问题有所帮助。首先,我创建一些示例数据:
set.seed(175)
choices <- c("A", "B", "C", "A,B", "A,C", "B,C", "A,B,C")
data <- data.frame(respondent = 1:15,
letter = sample(choices, 15, replace = TRUE))
data
## respondent letter
## 1 1 A,C
## 2 2 B,C
## 3 3 A,B
## 4 4 C
## 5 5 B,C
## 6 6 A,B
## 7 7 B
## 8 8 A
## 9 9 B,C
## 10 10 C
## 11 11 A
## 12 12 B
## 13 13 C
## 14 14 A,C
## 15 15 A,B,C
为简单起见,我只使用了三个级别。
1) 可以使用以下函数以您想要的方式直接绘制`data$letter):
plot_allapply <- function(choices) {
# convert to character
choices <- as.character(choices)
# split at comma and unlist
choices_split <- unlist(strsplit(choices, ","))
# convert back to factor and plot
plot(as.factor(choices_split))
}
plot_allapply(data$letter)
它的工作原理如下:首先需要将letter中的数据从factor类型转换为character。 (我知道这是一个因素,否则你根本不会得到一个情节。)然后,字符向量的每个元素都以逗号分隔。 (运行strsplit(as.character(data$letter), ",") 以了解这对您的数据有何作用,运行?strsplit 以了解更多信息。)。由于这会产生一个列表,因此使用unlist 将其转换为字符向量。最后一行转换回factor(这是plot 创建正确类型的绘图所必需的)并被绘制。
2) 您可以通过多种方式处理data$letter 中的数据。如果您有兴趣了解,哪些受访者选择了"B",您可以这样做
grepl("B", data$letter)
只要回复者的答案中包含"B",这将返回一个逻辑向量TRUE。因此,所有这些都会给TRUE:"B", "A,B", "A,B,C"。
也许将这些信息添加到您的数据框中会有所帮助。这可以按如下方式完成:
data <- transform(data, isA = grepl("A", letter),
isB = grepl("B", letter),
isC = grepl("C", letter))
data
## respondent letter isA isB isC
## 1 1 A,C TRUE FALSE TRUE
## 2 2 B,C FALSE TRUE TRUE
## 3 3 A,B TRUE TRUE FALSE
## 4 4 C FALSE FALSE TRUE
## 5 5 B,C FALSE TRUE TRUE
## 6 6 A,B TRUE TRUE FALSE
## 7 7 B FALSE TRUE FALSE
## 8 8 A TRUE FALSE FALSE
## 9 9 B,C FALSE TRUE TRUE
## 10 10 C FALSE FALSE TRUE
## 11 11 A TRUE FALSE FALSE
## 12 12 B FALSE TRUE FALSE
## 13 13 C FALSE FALSE TRUE
## 14 14 A,C TRUE FALSE TRUE
## 15 15 A,B,C TRUE TRUE TRUE