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)
我正在处理多个 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)