计算R csv中的岛屿

counting islands in R csv

我想在 .csv 中沿行数岛屿。我说 "islands" 表示 .csv 行上的连续非空白条目。如果连续三个非空白条目,我希望将其计为 1 个岛。任何少于三个连续条目的行都计为 1 "non-island"。然后我想将输出写入数据框:

Name,,,,,,,,,,,,,
Michael,,,1,1,1,,,,,,,,
Peter,,,,1,1,,,,,,,,,
John,,,,,1,,,,,,,,,

所需的数据帧输出:

Name,island,nonisland,
Michael,1,0,
Peter,0,1,
John,0,1,

你可以这样使用rle

output <- stack(sapply(apply(df, 1, rle), function(x) sum(x$lengths >= 3)))
names(output) <- c("island", "name")

output$nonisland <- 0
output$nonisland[output$island == 0] <- 1
#  island    name nonisland
#1      1 Michael         0
#2      0   Peter         1
#3      0    John         1

在这里,您 运行 rle 横跨数据框的行。然后查看并在发现长度为 3 或更多时将出现的次数加起来。

请注意,此解决方案假设所有岛屿都由相同的东西组成(即在您的示例中都是 1)。如果不是这种情况,您需要通过执行以下操作将所有非空条目转换为相同的东西:df[!is.na(df)] <- 1 before rle will be appropriate.