gpt4 book ai didi

r - 组合分类因子水平的惯用方法

转载 作者:行者123 更新时间:2023-12-04 21:39:56 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Cleaning up factor levels (collapsing multiple levels/labels)

(10 个回答)


4年前关闭。




这是我正在尝试做的一个简单的例子:

iris %>%
mutate(Species2 = ifelse(Species %in% c("setosa", "virginica"), "other", as.character(Species)) %>% as.factor) %>%
str
# 'data.frame': 150 obs. of 6 variables:
# $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# $ Species2 : Factor w/ 2 levels "Other","versicolor": 1 1 1 1 1 1 1 1 1 1 ...

但是,如果我想进行多次合并,我最终会得到深度嵌套的 ifelse声明,我试图避免。什么是最优雅的方式来做到这一点?最好我可以将解决方案合并到 dplyr 管道中。

最佳答案

您可以使用 match :

species.keep <- c("setosa", "virginica", "other")
iris %>% mutate(Species2 = species.keep[match(Species, species.keep, nomatch=3)])

我们使用 nomatch论据 match映射到 "other"在我们 species.keep 的最后一个位置任何不在先前位置的物种的向量。请注意,这里假设 "other"不是有效物种。您必须添加 as.factor等等,但这应该达到你想要的。 match是 R 中的基线映射函数。

关于r - 组合分类因子水平的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29132748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com