假设我有一个像THIS这样的data.frame(或在下面查看我的代码)。如您所见,在每隔一定数量的连续行之后,会有一行包含所有NA
的行。
我想知道如何基于split
的每一行NA
THIS data.frame?
例如,在下面的代码中,我希望将原始data.frame split
分成3个较小的data.frame,因为原始data.frame中有两行NA
。
这是我没有成功的尝试:
## The original data.frame:
DF <- read.csv("https://raw.githubusercontent.com/izeh/i/master/m.csv", header = T)
## the index number of rows with "NA"s; Here rows 7 and 14:
b <- as.numeric(rownames(DF[!complete.cases(DF), ]))
## split DF by rows that have "NA"s; that is rows 7 and 14:
split(DF, b)
答案 0 :(得分:1)
如果我们还需要NA行,请在“ study.name”列上用cumsum
创建一个组,该组为空白(或NA
)
library(dplyr)
DF %>%
group_split(grp = cumsum(lag(study.name == "", default = FALSE)), keep = FALSE)
或与base R
split(DF, cumsum(c(FALSE, head(DF$study.name == "", -1))))
或与NA
i1 <- rowSums(is.na(DF))== ncol(DF)
split(DF, cumsum(c(FALSE, head(i1, -1))))
或基于“ b”
DF1 <- DF[setdiff(seq_len(nrow(DF)), b), ]
split(DF1, as.character(DF1$study.name))
答案 1 :(得分:0)
您可以在b
中按行顺序查找DF
的出现,并使用cumsum
创建组。
split(DF, cumsum(seq_len(nrow(DF)) %in% b))