计算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.
我想在 .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.