【问题标题】:R - In apply function, logical always evaluates to false when data is integer, but evaluates correctly when integer is characterR - 在应用函数中,当数据为整数时,逻辑始终计算为假,但当整数为字符时,计算正确
【发布时间】:2022-07-06 03:25:42
【问题描述】:

在 R 中,我试图在数据框中的列 (a) 上运行应用函数,并将结果放入新列 (b)。 (c) 列是整数类,由整数 0 - 5 组成。

我的代码是:

df$b <- apply(df, 1, FUN = function (x) if (x["a"] == 0) x["b"] = "a"
else if (x["a"] == 1) x["b"] = "b"
else if (x["a"] == 2) x["b"] = "c" 
else if (x["a"] == 3) x["b"] = "d" 
else if (x["a"] == 4) x["b"] = "e" 
else x["b"] = "f")

当 a 列是整数类时,所有逻辑都失败,因此 b 列中的所有行都被分配“f”。但是,当我使用 as.character() 将 a 列更改为字符类时,逻辑计算正确。为什么会这样?

【问题讨论】:

  • 请分享您的数据,以便我们提供帮助。最有可能你在这里需要ifelse() 而不是应用/if 语句
  • 您的代码在这里与df &lt;- data.frame(a = as.integer(c(0,1,2,3,4))) 一起工作正常。请提供一些失败的数据以及有关您尝试执行的操作的更多信息。这可能不是正确的方法。

标签: r


【解决方案1】:

From the R Docs

请注意,x == 0 并非在所有情况下都有效。

这(我相信,如果我错了,请纠正我)是因为您在比较中的值是R numeric types。您可以通过运行来验证这一点:

# Assign an integer value to y
y = 5
 
# print the class name of variable
print(class(y))

值的数值类型不等于值的整数类型,但是当你将其转换为字符时,R比较会自动转换值to a numeric for you,使用字符向量的unicode值。

可以通过多种方式修复此特定代码。对于您似乎正在做的事情,类似于以下内容的 apply 函数可能是一个更具可读性的解决方案:

values <- c("a", "b", "c", "d", "e")
df$b <- ifelse( a > 4, "f", values[a + 1])

查看矢量化ifelse documentation

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2014-08-17
    • 2021-09-10
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多