我之前问了这个问题,弗兰克回答了here。原始问题:
我想在.csv中沿着行计算岛屿。我说" islands" 表示.csv行上的连续非空条目。如果有 连续三个非空白条目,我想要计算 作为一个岛屿。连续少于三个连续条目的任何内容 计为1"非岛"。然后我想将输出写入a 数据帧:
我稍微改变了输入.csv现在包括多个岛/间隙,这样行不仅仅是一个"岛"行或"非岛"行。有没有人有任何建议?
输入.csv:
Name,,,,,,,,,,,,,
Michael,,,1,1,1,,,,1,,,,
Peter,,,,1,1,,,,,,,,,
John,,,,,1,,,,,,,,,
Erin,,,,,1,1,,,,1,1,,,
所需的数据帧输出:
Name,island,nonisland,
Michael,1,1,
Peter,0,1,
John,0,1,
Erin,0,2
答案 0 :(得分:1)
添加上一个问题的代码,稍加修改即可获得nonisland
列
# sample data
df <- read.csv(text="
,,,,,,,,,,,,,
Michael,,,1,1,1,,,,1,,,,
Peter,,,,1,1,,,,,,,,,
John,,,,,1,,,,,,,,,
Erin,,,,,1,1,,,,1,1,,,")
output <- stack(sapply(apply(df, 1, rle),
function(x) sum(x$lengths >= 3)))
output$nonisland <- sapply(apply(df, 1, rle),
function(x) sum(x$lengths[!is.na(x$values)] < 3))
names(output) <- c("island", "names", "nonisland")
# values names nonisland
#1 1 Michael 1
#2 0 Peter 1
#3 0 John 1
#4 0 Erin 2