Home > Blockchain >  Adding multiple NA rows to a data frame
Adding multiple NA rows to a data frame

Time:12-24

I wanted to calculate something using a loop. The loop should go more than the number of my observations. For this reason, I want to first add NA rows to my data frame. Let's say my data frame is mtcars data. How can I add 10 NA rows in the mtcars data? The add_row()function from dplyr helps me to add only one NA row. Using rbind() also didn't help to add multiple rows.I probably need to loop this one too. But maybe there is an easy solution.

CodePudding user response:

To add several rows of NA to the dataframe, you can try this:

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

CodePudding user response:

There are many ways to do that. One way with 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)

output:

#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

CodePudding user response:

Alternatives that start with the base frame itself:

base 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
  • Related