【问题标题】:Why a substraction has a different result if computed from a dataframe? in R如果从数据帧计算,为什么减法会有不同的结果?在 R 中
【发布时间】:2018-12-19 15:57:17
【问题描述】:

我一直在检查我的数据,我意识到减法是错误的,我手动计算了它,我得到了正确的结果。

我的问题是,为什么当我从 data.frame 计算减法时,它会给出一个数字 0.5,而当我只用数字计算它时,它会给出正确的结果。

我试图在其他计算机上重现该问题,这里是这个问题的一个玩具示例

a <- data.frame(matrix(nrow = 1, ncol = 4))
a[1,] <- c(101292229, 101298224, 101190466, 101195700)
colnames(a) <- c("start_I","end_I","start_II","end_II")

a$MI <- (a$start_I + a$end_I)/2
a$MII <- (a$start_II + a$end_II)/2

a

    start_I     end_I  start_II    end_II        MI       MII
1 101292229 101298224 101190466 101195700 101295226 101193083

a$MII-a$MI

[1] -102143.5

101193083-101295226

[1] -102143

【问题讨论】:

  • 试试这个:sprintf("%f", a)。当您打印 a 时,MI 正在四舍五入,因此您的手动计算使用了不正确的数字。

标签: r dataframe subtraction


【解决方案1】:

正如 Lyngbakr 所指出的,a$MI 实际上是 101295226.5,但由于默认打印设置会截断小数位,因此仅显示为 101295226

如果您使用format() 覆盖这些设置,您会看到额外的.5 出现:

format(a, digits = 10)
    start_I     end_I  start_II    end_II          MI       MII
1 101292229 101298224 101190466 101195700 101295226.5 101193083

【讨论】:

    【解决方案2】:

    试试

    as.integer(a$MII-a$MI)

    得到你期望的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      相关资源
      最近更新 更多