Add/complete R 中数据框的固定列数

Add/complete fixed number of columns on dataframe in R

我正在处理多个 R 文件,有些文件有 3 列

id v_1 v_2 V_3
 1 1   2   3     

其他的多一些少一些

id v_1 v_2
 1 1  7       

是否可以“强制”每个文件有 10 列(不包括 id col)和没有值的额外列,这样你就可以得到

第一个例子

id v_1 v_2 v_3 v_4 v_5 v_6 v_7 v_8 v_9 v_10
1  1   2   3

第二个例子

id v_1 v_2 v_3 v_4 v_5 v_6 v_7 v_8 v_9 v_10
1  1  7

所以基本上无论输入文件中的列数如何,您总是会得到 10 列

这里有一个使用 bind_rows 的可能性,您首先创建一个包含所需列的空数据框,然后将它们绑定在一起。

library(dplyr)

df_cols <- setNames(data.frame(matrix(ncol = 11, nrow = 0)), c("id", paste0("v_", 1:10)))

bind_rows(df_cols, df)

另一个(可能更快的选项)是使用 data.table:

library(data.table)

rbindlist(list(df_cols, df), fill = TRUE)

另一种选择是使用 plyr:

plyr::rbind.fill(df_cols, df)

输出

  id v_1 v_2 v_3 v_4 v_5 v_6 v_7 v_8 v_9 v_10
1  1   1   2   3  NA  NA  NA  NA  NA  NA   NA

如果您有数据帧列表,则可以使用 map 更新列表中的所有数据帧:

library(tidyverse)

map(list(df, df2), bind_rows, df_cols)

#[[1]]
#  id v_1 v_2 v_3 v_4 v_5 v_6 v_7 v_8 v_9 v_10
#1  1   1   2   3  NA  NA  NA  NA  NA  NA   NA

#[[2]]
#  id v_1 v_2 v_3 v_4 v_5 v_6 v_7 v_8 v_9 v_10
#1  1   1   2  NA  NA  NA  NA  NA  NA  NA   NA

数据

df <- read.table(text = "id v_1 v_2 v_3
 1 1   2   3", header = T)

df2 <- read.table(text = "id v_1 v_2
 1 1   2", header = T)