首页 > 解决方案 > 如何拆分值的数据帧并在块上使用 rle?

问题描述

我正在尝试划分(不一定分成偶数块,bc 实际数据可能会有所不同)称为分数(.csv 文件)的单列整数,然后计算每个划分中的连续值(x 选择值,例如 1)部分或连续值的平均长度。rle 一切皆有可能。

我可以使用 split 轻松拆分整数列,但这似乎与 rle 不兼容(大概 bc split 生成一个列表)。我寻找 rle 的解决方案和/或替代方案,但没有提出任何建议。

示例分数

scores <- c(1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1)

拆分它们

g <- seq_along(scores)

scores.div <- split(scores, ceiling(g/7))

我尝试过但没有用的示例

Scores.rle <- sapply(scores.div, function(x) {
  r <- rle(x)
  sum(r$values == 1)
})

我希望有这样的输出:

2 2 0 1 1

任何帮助是极大的赞赏

标签: rlistsplitrun-length-encoding

解决方案


我们也可以使用tapply

as.vector(tapply(scores, ceiling(g/7), FUN = function(x) sum(rle(x)$values == 1)))
#[1] 2 2 0 1 1

推荐阅读