r-将多个NA行添加到数据帧



我想用循环来计算一些东西。这个循环应该超过我观察到的次数。出于这个原因,我想首先将NA行添加到我的数据帧中。假设我的数据帧是mtcars数据。如何在mtcars数据中添加10个NA行?dplyr中的add_row()函数帮助我只添加一个NA行。使用rbind()也无助于添加多行。我可能也需要循环这个。但也许有一个简单的解决方案。

要在数据帧中添加几行NA,可以尝试以下操作:

n <- 2 # Number of NA rows
rbind(df, matrix(NA, nrow = n, ncol = NCOL(df), 
dimnames = list(NULL, colnames(df))))

有很多方法可以做到这一点。使用base-R的单向:

#make a data.frame with 10 rows of NA
na_frame <- as.data.frame(matrix(NA, nrow = 10, ncol = 11))
#add the names of mtcars
names(na_frame) <- names(mtcars)
#bind together
rbind(mtcars, na_frame)

输出:

#truncated
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
1                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
2                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
3                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
4                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
5                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
6                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
7                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
8                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
9                     NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA
10                    NA  NA    NA  NA   NA    NA    NA NA NA   NA   NA

从基本框架本身开始的替代方案:

基数R

mt <- mtcars[1:3,]
rbind(mt, mt[0,][rep(NA, 11),])
#        mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# 2     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# 3     22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# NA      NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.1    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.2    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.3    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.4    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.5    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.6    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.7    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.8    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.9    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# NA.10   NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA

dplyr

library(dplyr)
mt %>%
slice(rep(1, 11)) %>%
mutate(across(everything(), ~ NA)) %>%
bind_rows(mt, .)
#     mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1  21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# 2  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# 3  22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# 4    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 5    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 6    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 7    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 8    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 9    NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 10   NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 11   NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 12   NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 13   NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
# 14   NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA

最新更新