我有这个载体
v <- c("firstOne","firstTwo","secondOne")
我想将向量分配c("firstOne","firstTwo)
到同一级别(即firstOne
)。我试过这个:
> factor(v, labels = c("firstOne", "firstOne", "secondOne"))
[1] firstOne firstOne secondOne
Levels: firstOne firstOne secondOne
但是我得到了一个重复的因素(以及一条警告消息,建议不要使用它)。相反,我希望输出看起来像:
[1] firstOne firstOne secondOne
Levels: firstOne secondOne
有没有办法在不粗暴地替换字符串的情况下获得此输出?
答案 0 :(得分:2)
以下是几个选项:
v <- factor(ifelse(v %in% c("firstOne", "firstTwo"), "firstOne", "secondOne"))
v <- factor(v,levels = c("firstOne","secondOne")); f[is.na(f)] <- 'firstOne'
答案 1 :(得分:2)
因子只是带有标签的数字(整数)向量,因此操纵因子等同于操纵整数而不是字符串。因此,在性能方面完全可以做到
f <- as.factor(v)
f[f %in% c('firstOne', 'firstTwo')] <- 'firstOne'
f <- droplevels(f)
答案 2 :(得分:0)
您可以使用sjmisc-package的rec
- 函数:
rec(v, "firstTwo=firstOne;else=copy", as.fac = T)
> [1] firstOne firstOne secondOne
> Levels: firstOne secondOne
(缩短输出;请注意,sjmisc-package支持labelled data,因此会向矢量添加标签属性,您也可以在控制台输出中看到这些属性)
答案 3 :(得分:0)
最终我还找到了一个看起来有点草率的解决方案,但我没有看到重大问题(期待听到这个可能存在的问题):
v <- c("firstOne","firstTwo","secondOne")
factor(v)
factor(factor(v,labels = c("firstOne","firstOne","secondOne")))