r - 在 R 中创建组合数据框

标签 r dataframe dplyr

我有两个数据帧(DF1 和 DF2),我想创建一个名为 DF_MAIN 的组合数据帧。为了清楚起见,DF1 由 5 列组成,而 DF2 由 3 列组成。我的目标是构造总共 10 列的 DF_MAIN,组织如下:DF1 中的前 5 列,后面是 2 个空列,然后是 DF2 中的剩余 3 列。值得注意的是,这些输入数据帧中的行数和列数可能会有所不同,但我的目标是将它们合并为具有指定列结构的单个综合数据帧。

示例数据框-

# Create a sample dataframe 
DF1 <- data.frame(
  A = sample(c("text", "string", NA, "", "123", 1.23, "#N/A"), 10, replace = TRUE),
  B = sample(c("text", "string", NA, "", "123", 1.23, "#N/A"), 10, replace = TRUE),
  C = sample(c("text", "string", NA, "", "123", 1.23, "#N/A"), 10, replace = TRUE)
)


set.seed(456)

DF2 <- data.frame(
  D = sample(c("text", "string", NA, "", "456", 4.56, "#N/A"), 20, replace = TRUE),
  E = sample(c("text", "string", NA, "", "789", 7.89, "#N/A"), 20, replace = TRUE),
  F = sample(c("text", "string", NA, "", "123", 1.23, "#N/A"), 20, replace = TRUE),
  G = sample(c("text", "string", NA, "", "987", 9.87, "#N/A"), 20, replace = TRUE),
  H = sample(c("text", "string", NA, "", "321", 3.21, "#N/A"), 20, replace = TRUE)
)

print(DF1)
print(DF2)

最佳答案

如果 DF1 小于 DF2,则使用 rbindcbindmatrix 分别将不匹配的行和列拼接在一起。

data.frame(
  cbind(matrix(NA, nrow=nrow(DF1), ncol=ncol(DF2) - ncol(DF1)), DF1) |> 
    (\(x){
      nms <- names(x)
      rbind(as.matrix(x), 
        setNames(
          matrix(NA, nrow=nrow(DF2) - nrow(DF1), ncol=ncol(DF2)), 
          nms))
    })(), 
  DF2)
     X1   X2      A    B    C      D      E      F      G      H
1  <NA> <NA> string <NA>  123    456    789   <NA>   9.87   text
2  <NA> <NA>        1.23 #N/A    456                 text   3.21
3  <NA> <NA>   text      text   <NA>   7.89   1.23   <NA> string
4  <NA> <NA>                    4.56   #N/A   <NA>   #N/A   <NA>
5  <NA> <NA>   text <NA> #N/A    456   text string string    321
6  <NA> <NA>    123 1.23 text          text   1.23   <NA>   3.21
7  <NA> <NA>    123 <NA>  123   <NA>   7.89   <NA>   #N/A   <NA>
8  <NA> <NA>   text <NA> text   text    789   1.23   text   text
9  <NA> <NA>    123             4.56   text   <NA>              
10 <NA> <NA>    123 text  123   #N/A string   #N/A   #N/A   <NA>
11 <NA> <NA>   <NA> <NA> <NA> string          text          3.21
12 <NA> <NA>   <NA> <NA> <NA>   text string          text    321
13 <NA> <NA>   <NA> <NA> <NA>   #N/A   <NA>        string string
14 <NA> <NA>   <NA> <NA> <NA> string          text   text string
15 <NA> <NA>   <NA> <NA> <NA>   <NA>          text    987   <NA>
16 <NA> <NA>   <NA> <NA> <NA>   <NA> string   1.23   9.87    321
17 <NA> <NA>   <NA> <NA> <NA>   #N/A   #N/A string        string
18 <NA> <NA>   <NA> <NA> <NA>   4.56   text   #N/A   <NA>   <NA>
19 <NA> <NA>   <NA> <NA> <NA>   4.56 string   <NA>   #N/A       
20 <NA> <NA>   <NA> <NA> <NA>    456   text   1.23   text   <NA>

关于r - 在 R 中创建组合数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77105649/

相关文章:

r - 在 R 中创建多个相同(相同维度)矩阵的列表

r - 如何在 R 中将 SpatialPointsDataFrame 更改为 SpatialPolygonsDataFrame 以在 ggplot2 中使用它?

C++ 和 R : Create a . so 或 .dll

R 会绘图但不会绘制 abline

python - 根据值 Pandas Dataframe 获取所有其他列

r - 分组和计数实例?

python - 将一行中的每个元素相乘并在同一数据框中附加新列?

python - 读取 csv 文件中重复的列名

r - 将 do.call 与 dplyr 标准评估版本一起使用

r - 在 r 中按时间分组的累积计数