我有一个数据框
DF <- data.frame(V1 = factor(c("Option 1", "Option 1", "Option 1, Option 2", "Option 2", "Option 2", "Option 1, Option 2")),
ID1 = factor(c("Resp1", "Resp1", "Resp3", "Resp4", "Resp5", "Resp6")))
我想将双重响应分开,这样我只有“选项1”和“选项2”级别,并且双重响应分配给两者。一种选择是重命名级别,然后使用separate_rows
,但这非常耗费人力:
levels(DF$V1)
levels(DF$V1)[levels(DF$V1)=="Option 1"] <- "Option1"
levels(DF$V1)[levels(DF$V1)=="Option 2"] <- "Option2"
levels(DF$V1)[levels(DF$V1)=="Option 1, Option 2"] <- "Option1, Option2"
DF_result <- DF %>%
separate_rows(V1) %>%
mutate(V1 = factor(V1))
DF_result
有更简单的方法吗?
答案 0 :(得分:2)
您可以删除替换值的前几行(例如&#34;选项1&#34; - &gt;&#34;选项1&#34;),因为separate_rows
需要{{1您可以设置为逗号的参数。由于您的某些值在&#34; Option&#34;之间有空格。和数字,有些没有,你可以删除所有空格来标准化他们 - 我使用sep
,因为它很方便。然后用逗号分隔行,然后制作你的因子。
stringr::str_remove_all
答案 1 :(得分:1)
选项是首先应用library(tidyverse)
DF %>%
mutate(V1 = str_remove_all(V1, " ")) %>%
separate_rows(V1, sep = ",") %>%
mutate(V1 = as.factor(V1))
#> V1 ID1
#> 1 Option1 Resp1
#> 2 Option1 Resp1
#> 3 Option1 Resp3
#> 4 Option2 Resp3
#> 5 Option2 Resp4
#> 6 Option2 Resp5
#> 7 Option1 Resp6
#> 8 Option2 Resp6
,然后使用tidyr::separate_rows
从V1
列中删除空格。请确保将gsub
传递给sep = ","
函数,以避免对separate_rows
进行任何预处理。
V1