gpt4 book ai didi

r - ifelse 没有别的

转载 作者:行者123 更新时间:2023-12-03 09:24:41 25 4
gpt4 key购买 nike

基本上在 SAS 中,我可以在没有 else 的情况下执行 if 语句。例如:

if species='setosa' then species='regular';

不需要别的。

如何在R中做到这一点?这是我下面的脚本,它不起作用:
attach(iris)

iris2 <- iris
iris2$Species <- ifelse(iris2$Species=='setosa',iris2$Species <- 'regular',iris2$Species <- iris2$Species)
table(iris2$Species)

最佳答案

几个选项。最好是只做替换,这很好很干净:

iris2$Species[iris2$Species == 'setosa'] <- 'regular'
ifelse返回一个向量,因此在这种情况下使用它的方法是用 ifelse 创建的新列替换该列。 .不要在里面做赋值 ifelse !
iris2$Species <- ifelse(iris2$Species=='setosa', 'regular', iris2$Species)
但是很少需要使用 ifelse如果 else 是“保持不变” - 直接替换子集(此答案中的第一行代码)更好。

新的因子水平
好的,所以上面发布的代码实际上不起作用 - 这是因为 iris$Speciesfactor (分类)变量,和 'regular'不是类别之一。解决这个问题的最简单方法是将变量强制为 character编辑前:
iris2$Species <- as.character(iris2$Species)
iris2$Species[iris2$Species == 'setosa'] <- 'regular'
其他方法也有效(直接编辑因子水平或重新分解并指定新标签),但这不是您问题的重点,因此我认为它超出了答案的范围。

另外,正如我在评论中所说,不要使用 attach .如果您不小心使用它,最终可能会导致您的列不同步,从而产生烦人的错误。 (在您发布的代码中,无论如何您都没有使用它 - 如果您删除 attach 行,其余部分也能正常运行。)

关于r - ifelse 没有别的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427343/

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