【问题标题】:Using trunc with ifelse gives different behavior than using trunc alone将 trunc 与 ifelse 一起使用会产生与单独使用 trunc 不同的行为
【发布时间】:2019-01-03 04:43:55
【问题描述】:

我正在尝试更改数据框中的一列,以便将 = 10 的数字应该被截断,小数点后的所有内容都被删除。

这里有一些代码:

df <- tibble (
  x = c(1.2, 3.4, 6.7, 11.44, 15.9)
)

test_trunc_ifelse <- ifelse(df$x < 10, round(df$x, digits = 1), trunc(df$x))

test_trunc <- trunc(df$x)

还有一些结果:

test_trunc_ifelse
[1]  1.2  3.4  6.7 11.0 15.0

test_trunc
[1]  1  3  6 11 15

我认为(并希望)ifelse 输出以下内容:

[1]  1.2  3.4  6.7 11 15

为什么不这样做?以及如何获得该输出?

【问题讨论】:

    标签: r


    【解决方案1】:

    你想要的是两个类 numeric 和 integer 并且不可能在同一个向量中有两个类。

    如果您仍然想要预期的输出,一种技巧是将其转换为字符

    test <- as.character(ifelse(df$x < 10, round(df$x, digits = 1), trunc(df$x)))
    test
    #[1] "1.2" "3.4" "6.7" "11"  "15" 
    

    但是你不能用这个进行任何数学计算。为此,您需要再次将其转换为数字或整数。

    as.numeric(test)
    #[1]  1.2  3.4  6.7 11.0 15.0
    as.integer(test)
    #[1]  1  3  6 11 15
    

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2013-01-31
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多