Вот один метод, который работает на базе R, при условии, что взятие NA
-го кадра возвращает строку, заполненную NA
значениями.
dat <- head(iris)
unlist(lapply(seq_len(nrow(dat)), c, rep(NA, 2)))
# [1] 1 NA NA 2 NA NA 3 NA NA 4 NA NA 5 NA NA 6 NA NA
dat[ unlist(lapply(seq_len(nrow(dat)), c, rep(NA, 2))), ]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# NA NA NA NA NA <NA>
# NA.1 NA NA NA NA <NA>
# 2 4.9 3.0 1.4 0.2 setosa
# NA.2 NA NA NA NA <NA>
# NA.3 NA NA NA NA <NA>
# 3 4.7 3.2 1.3 0.2 setosa
# NA.4 NA NA NA NA <NA>
# NA.5 NA NA NA NA <NA>
# 4 4.6 3.1 1.5 0.2 setosa
# NA.6 NA NA NA NA <NA>
# NA.7 NA NA NA NA <NA>
# 5 5.0 3.6 1.4 0.2 setosa
# NA.8 NA NA NA NA <NA>
# NA.9 NA NA NA NA <NA>
# 6 5.4 3.9 1.7 0.4 setosa
# NA.10 NA NA NA NA <NA>
# NA.11 NA NA NA NA <NA>
(имена строк могутбыть отвлекающим, но их можно легко удалить и / или изменить / обновить.)
Количество строк здесь зафиксировано в 2 на строку фактических наблюдений.Если вам нужно изменить его, переключитесь с sapply
на mapply
/ unlist
с другим векторным аргументом:
unlist(mapply(function(a,b) c(a, rep(NA, b)), seq_len(nrow(dat)), c(2,1,2,1,2,1)))
# [1] 1 NA NA 2 NA 3 NA NA 4 NA 5 NA NA 6 NA
dat[ unlist(mapply(function(a,b) c(a, rep(NA, b)), seq_len(nrow(dat)), c(2,1,2,1,2,1))), ]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# NA NA NA NA NA <NA>
# NA.1 NA NA NA NA <NA>
# 2 4.9 3.0 1.4 0.2 setosa
# NA.2 NA NA NA NA <NA>
# 3 4.7 3.2 1.3 0.2 setosa
# NA.3 NA NA NA NA <NA>
# NA.4 NA NA NA NA <NA>
# 4 4.6 3.1 1.5 0.2 setosa
# NA.5 NA NA NA NA <NA>
# 5 5.0 3.6 1.4 0.2 setosa
# NA.6 NA NA NA NA <NA>
# NA.7 NA NA NA NA <NA>
# 6 5.4 3.9 1.7 0.4 setosa
# NA.8 NA NA NA NA <NA>