r - 有没有办法将数据框的列与完整列名的向量相匹配?

标签 r dataframe

我有一个列名向量(其中 262 个)和一个具有相同列名但缺少几列的数据框(因此我有 250 列而不是 262 列)。

有没有办法将数据框的列设置为包含完整列名称集的向量,并为没有数据的名称生成一列 NA?

例如,如果我有一个向量和数据框,如下所示:

column_names <- c("col1","col2","col3","col4","col5","col6","col7")

df1 <- data.frame(c(20,30,10,20,45),c(1,10,2,45,2),c(9,10,22,11,12),c(87,7,7,7,14),c(89,90,99,12,1))
names(df1) <-c("col1","col2","col3","col5","col6")

# col1 col2 col3 col5 col6
# 20   1    9    87   89
# 30   10   10   7    90
# 10   2    22   7    99
# 20   45   11   7    12
# 45   2    12   14   1

我想生成一个看起来像这样的:

df2 <- data.frame(c(20,30,10,20,45),c(1,10,2,45,2),c(9,10,22,11,12),c("NA","NA","NA","NA","NA"),c(87,7,7,7,14),c(89,90,99,12,1),c("NA","NA","NA","NA","NA"))
names(df2) <-column_names

# col1 col2 col3 col4 col5 col6 col7
# 20   1    9    NA   87   89   NA
# 30   10   10   NA   7    90   NA
# 10   2    22   NA   7    99   NA
# 20   45   11   NA   7    12   NA
# 45   2    12   NA   14   1    NA

最佳答案

您可以使用 setdiff 获取缺失的列名,然后添加新列。

column_names <- c("col1","col2","col3","col4","col5","col6","col7")

df <- data.frame(col1 = c(20,30,10,20,45),col2=c(1,10,2,45,2),col4=c(9,10,22,11,12),col5=c(87,7,7,7,14),col6=c(89,90,99,12,1))serdi(colnames(df),column_names)

missing_cols <- setdiff(column_names,colnames(df))
df[missing_cols] <- NA

df <- df[column_names]

df
  col1 col2 col3 col4 col5 col6 col7
1   20    1   NA    9   87   89   NA
2   30   10   NA   10    7   90   NA
3   10    2   NA   22    7   99   NA
4   20   45   NA   11    7   12   NA
5   45    2   NA   12   14    1.  NA

关于r - 有没有办法将数据框的列与完整列名的向量相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73146356/

相关文章:

r - dplyr::filter 内带有点的管道

r 检查 Sys.time() 是否在一天中给定的时间间隔内

python - 对可能是也可能不是多索引的 pandas 数据帧进行操作

python - Python:将数据框转换为列表,列表中包含字符串项

python - 从数据框列表中访问元素的名称

r - 任意定义函数的数值导数

r - 如何提取 ggplot2 对象的绘图轴范围?

r - 执行 st_union() 操作后如何将多多边形几何体分成多个多边形对象?

python - 使用 pandas 计算下一行的值作为前一行的函数

r 将数据框 R 的列表与 NULL 绑定(bind)