基于匹配字符的折叠因子级别
Collapse factor levels based on matching characters
我的小标题中有很多因子向量。这是一项调查,所以级别是字母代码。
调查工具包含调查时选择的字母顺序(来自答题器),这可能有用也可能没用,具体取决于问题。
我正在寻找一个整洁的函数或一个过程来折叠具有匹配字母的因子水平。
即,"B,A" = "A,B",这会折叠为 "A,B"。
或"B,C,A" = "C,A,B" = "A,B,C"或字母A、B、C的任意组合。我在一个因子级别最多可以有 5 个字母,所以它会很快变得复杂。
是否应该将其转换为字符串,然后使用stringi 或grepl 将其分成多列?我有很多专栏,所以我正在寻找一个巧妙的解决方案。有任何想法吗?
这是我的数据中的一个简单字符串示例:
string<-c("E","C","A","A,B","A,B,C","B,A","C,A,B") %>% as.factor()
用逗号分隔,排序,粘贴在一起。
string %>% strsplit(split = ",", fixed = TRUE) %>%
lapply(sort) %>%
sapply(paste, collapse = ",") %>%
factor
# [1] E C A A,B A,B,C A,B A,B,C
# Levels: A A,B A,B,C C E
我的小标题中有很多因子向量。这是一项调查,所以级别是字母代码。
调查工具包含调查时选择的字母顺序(来自答题器),这可能有用也可能没用,具体取决于问题。
我正在寻找一个整洁的函数或一个过程来折叠具有匹配字母的因子水平。 即,"B,A" = "A,B",这会折叠为 "A,B"。
或"B,C,A" = "C,A,B" = "A,B,C"或字母A、B、C的任意组合。我在一个因子级别最多可以有 5 个字母,所以它会很快变得复杂。
是否应该将其转换为字符串,然后使用stringi 或grepl 将其分成多列?我有很多专栏,所以我正在寻找一个巧妙的解决方案。有任何想法吗?
这是我的数据中的一个简单字符串示例:
string<-c("E","C","A","A,B","A,B,C","B,A","C,A,B") %>% as.factor()
用逗号分隔,排序,粘贴在一起。
string %>% strsplit(split = ",", fixed = TRUE) %>%
lapply(sort) %>%
sapply(paste, collapse = ",") %>%
factor
# [1] E C A A,B A,B,C A,B A,B,C
# Levels: A A,B A,B,C C E