Tanya Valkanova
Tanya Valkanova

Reputation: 209

Add empty columns to obtain certain amount of columns to existing dataframe

I have a dataframe with variable number of F, F can go from 1 to X

df1 <- data.frame(F1=c(1,5,NA,9),F2=c(2,5,"a",NA),F3=c(1,NA,"o",NA))
df1
   F1   F2   F3
 1  1    2    1
 2  5    5 <NA>
 3 NA    a    o
 4  9 <NA> <NA>

but I need my data frame to have certain amount of columns, lets say 30. If X is smaller then 30 then I need the amount of columns needed (with NA values) to be added to make 30 columns.

> df1
  F1   F2   F3  F4......F30
1  1    2    1 <NA>.....<NA>   
2  5    5 <NA> <NA>.....<NA>  
3 NA    a    o <NA>.....<NA>  
4  9 <NA> <NA> <NA>.....<NA>  

Thanks!

Upvotes: 1

Views: 49

Answers (2)

GuedesBF
GuedesBF

Reputation: 9858

I think it can first create an empty data.frame with X or 30 columns, than replace selected columns with your data.frame.

libary(dplyr)
library(purrr)

df1<-tibble(map_dfc(1:30, ~rep(NA, nrow(df1)))) %>%
     set_names(~paste0("F", 1:30)) %>%
     coalesce(., df1)

Upvotes: 2

akrun
akrun

Reputation: 886948

We may use setdiff on the names of the dataset and assign those to NA

df1[setdiff(paste0("F", 1:30), names(df1))] <- NA

-output

> df1
  F1   F2   F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30
1  1    2    1 NA NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
2  5    5 <NA> NA NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
3 NA    a    o NA NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
4  9 <NA> <NA> NA NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA

Upvotes: 3

Related Questions