我正在寻找可以插入变量号的代码。带有观察值的每行之后的空白行(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(行数)或1,而不是长度 20英寸
任何人都建议如何变通以克服困难。 2?
答案 0 :(得分:0)
这是一种基于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>