繁体   English   中英

如何将多个 NA 作为行添加到数据框中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM