【问题标题】:Compare each row value to multiple rows and return a value [closed]将每行值与多行进行比较并返回一个值 [关闭]
【发布时间】:2014-05-29 17:44:38
【问题描述】:

我正在 R 中尝试以下操作。

我有一个带有时间(小时)的数据框,第二列有零或一。连续时间步长之间的时间间隔为 1 小时。如果我可以附上一个示例文件但不知道如何附上,那会更容易。我试图找出相隔 24 小时出现多少个 1。 24 小时内有多个“1”被视为“1”

假设有一个计数器,cnt 初始化为 0。

我想将第二列中的每一行与 24 小时窗口中的第二列值进行比较。如果在任何 24 小时内有多个“1”,则表示该 24 小时窗口内有一个“1”。

在 FORTRAN 中,我会设置一个计数器,转到每个时间步长,比较接下来 24 小时/时间步长的值。如果找到“1”,则第一个“1”会将计数器增加 1。如果在同一 24 小时内还有另一个“1”,我将不再增加计数器并移至下一行并一直这样做,直到文件结束。

希望我能解释一下我想要什么。如果不清楚,请告诉我。认为可以通过 match() 函数或 plyr 包完成某些事情但无法找到。

【问题讨论】:

  • 如果我猜对了,您想找出重叠的 24 小时中的哪一个至少有一个“1”;即输出可能是一个简单的 T/F 向量?
  • set.seed(1) dat
  • @alexis_laz:不确定。我试图对数字进行 24 小时移动总和,之后当移动总和大于等于 1 时我得到至少一个,但是我如何区分这些事件是否相隔 24 小时?
  • 对不起 - 我仍然很困惑。您能否提供一个小的“x”(0 和 1),考虑到“奇怪”的发生情况并显示预期的输出,假设为方便起见 -e.g.- 3 小时间隔(不是 24 小时)?

标签: r compare


【解决方案1】:

Bioconductor 中的 IRanges 包可以在这里提供帮助。首先,计算大小为 24 的窗口的 score 的运行总和。然后将总和限制为 1。

rs <- IRanges::runsum(score, 24)
pmin(rs, 1)

这就是你想要的吗?您可能想使用endrule 参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多