我正在寻找一个可以插入变量no的代码。对于空行(4-6),在每一行后面都有观察(当前表中有5行),这样我就可以向空白行填充/添加观察。我偶然发现了以下代码:
library(dplyr)
df %>%
split(df$id) %>%
Map(rbind, ., NA) %>%
do.call(rbind, .) %>%
mutate(id = rep(df$id, each = 2))但是,将“每个”中的2替换为4将返回一个错误消息,
错误:列
ID必须长度为10 (行数)或一列,而不是20
有什么建议吗?如何绕开第二关?
发布于 2019-03-12 05:13:20
下面是一种在基本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>https://stackoverflow.com/questions/55114328
复制相似问题