我想在 .csv 中沿行计算岛屿数量。我说的“岛屿”是指 .csv 行上的连续非空白条目。如果连续出现 3 个非空白条目,我希望将其计为 1 个岛屿。连续少于三个连续条目的任何内容都算作 1 个“非岛屿”。然后我想将输出写入数据帧:
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
之前rle
会比较合适。
关于r - 在 R csv 中计算岛屿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654489/