Reputation: 209
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
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
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