[英]How can I add several NA's as rows to data frame?
让我们采用以下数据框:
> df<-data.frame(1:3,4:6,7:9)
> df
X1.3 X4.6 X7.9
1 1 4 7
2 2 5 8
3 3 6 9
我想在包含 NA 的数据框的开头添加四个新行。 所以使用rbind()
很容易做到。 就在
df<-rbind(NA,df)
但是有什么办法可以做到一次四次呢? 或者我必须使用上面的命令四次才能得到下面的结果:
> df
X1.3 X4.6 X7.9
1 NA NA NA
2 NA NA NA
3 NA NA NA
4 NA NA NA
5 1 4 7
6 2 5 8
7 3 6 9
您可以在行子集中使用rep
。
rbind(df[rep(NA, 4),], df)
# X1.3 X4.6 X7.9
#NA NA NA NA
#NA.1 NA NA NA
#NA.2 NA NA NA
#NA.3 NA NA NA
#1 1 4 7
#2 2 5 8
#3 3 6 9
类似于 GKi 的解决方案,但没有rbind()
:
df[c(rep(NA, 4L), seq_len(nrow(df))), ]
# X1.3 X4.6 X7.9
# NA NA NA NA
# NA.1 NA NA NA
# NA.2 NA NA NA
# NA.3 NA NA NA
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9
如果您不介意底部有NA行:
df[ nrow(df) + 1:4, ] <- NA
# X1.3 X4.6 X7.9
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9
# 4 NA NA NA
# 5 NA NA NA
# 6 NA NA NA
# 7 NA NA NA
或者,要修复 NA 的顺序、不存在的子集行并重新排序(但我不喜欢行名):
df <- df[ c(nrow(df) + 1:4, seq(nrow(df))), ]
df
# X1.3 X4.6 X7.9
# NA NA NA NA
# NA.1 NA NA NA
# NA.2 NA NA NA
# NA.3 NA NA NA
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9
也许有一个函数,但您可以使用单行循环:
for(i in 1:4){df <- rbind(NA,df)}
> rbind(matrix(rep(NA, 9), ncol = 3, dimnames = list(1:3, names(df))), df)
X1.3 X4.6 X7.9
1 NA NA NA
2 NA NA NA
3 NA NA NA
11 1 4 7
21 2 5 8
31 3 6 9
如果要重置行名:
df <- rbind(matrix(rep(NA, 9), ncol = 3, dimnames = list(1:3, names(df))), df)
row.names(df) <- NULL
df
X1.3 X4.6 X7.9
1 NA NA NA
2 NA NA NA
3 NA NA NA
4 1 4 7
5 2 5 8
6 3 6 9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.