如何重构向量?

时间:2016-05-19 21:39:31

标签: r

我有这个载体

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

有没有办法在不粗暴地替换字符串的情况下获得此输出?

4 个答案:

答案 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-packagerec - 函数:

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")))