【问题标题】:Why is rle in R returning incorrect lengths?为什么 R 中的 rle 返回不正确的长度?
【发布时间】:2019-12-02 17:31:49
【问题描述】:

我正在使用函数“rle”来计算向量中有多少个连续值。我的向量的第一部分是:

16992 32 96 8
48
144
8
8
8
8
8
8
8
8
8
8
8

但 rle 返回的长度为 '1 1 1 1 1 1 2 1 1 1 4 1 1'

和值'16992 32 96 8 48 144 8 8 8 8 8 8 8'

显然有 11 个连续的 8。请问有人可以帮忙吗?提前谢谢你。

更新: 我使用 dput() 查看我的数据并显示:

c(16992, 31.9999997615814, 96, 8, 48, 144, 8, 8, 8.00000023841858, 8, 7.99999976158142, 8, 8, 8, 8, 8.00000023841858, 7.99999976158142).

看到这个之后,看起来值有时刚好低于或高于 8,尽管当我 View() 向量时没有显示。是这个问题吗?

我有点困惑为什么这些值没有四舍五入到最接近的整数。我事先将 diff() 函数应用于这些时间点...

c(1390456832,
1390473824,
    1390473856,
    1390473952,
    1390473960,
    1390474008,
    1390474152,
1390474160,
1390474168,
1390474176,
    1390474184,
    1390474192,
    1390474200,
    1390474208,
    1390474216,
    1390474224,
    1390474232)

【问题讨论】:

  • 请使用dput显示示例,因为我无法复制它v1 <- scan(text = '16992 32 96 8 48 144 8 8 8 8 8 8 8 8 8 8 8', what = numeric(), quiet = TRUE);rle(v1)$lengths# [1] 1 1 1 1 1 1 11
  • 如果我们看不到代码,就很难帮助调试它。什么代码不起作用?
  • 如果x <- c(16992, 32, 96, 8, 48, 144, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8) 然后我从rle(x) 得到的结果在我运行它时显示11 个连续的8。请提供我们可以复制和粘贴而无需进行任何更改的代码。
  • 8.0000000238418588 不相等。如果你想让它平等,请rle(round(v1)$lengths)
  • 可能是那些初始数字不是整数

标签: r


【解决方案1】:

值是floats,它们不相等。检查Why are these numbers not equal?。一种选择是round 并应用rle

rle(round(v1))$lengths
#[1]  1  1  1  1  1  1 11

数据

v1 <- c(16992, 31.9999997615814, 96, 8, 48, 144, 8, 8, 
   8.00000023841858, 8, 7.99999976158142, 8, 8, 8, 8, 
    8.00000023841858, 7.99999976158142)

【讨论】:

  • 我不知道 R 使用过这个系统——非常感谢@akrun!
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2016-05-31
  • 2020-03-08
  • 2016-05-12
  • 2011-08-06
  • 2013-03-08
相关资源
最近更新 更多