首页 > 解决方案 > 如何合并r中列表中包含的数据帧中的行

问题描述

我有 3 个数据框列表,以这种方式列出 x、y 和 z

x
[1]
ID   1h   2h  3h
1    3     5  6
2    1     8  2
3    7     3  9
[2]
ID   1h   2h  3h
1    9     0  0
2    0     3  1
3    2     4  7
[3]
ID   1h   2h  3h
1    3     1  0
2    5     5  0
3    7     0  0
y
[1]
ID   1h   2h  3h
1    7     3  0
2    1     8  2
3    7     3  9
[2]
ID   1h   2h  3h
1    8     0  1
2    9     5  3
3    2     4  7
[3]
ID   1h   2h  3h
1    0     2  9
2    0     5  9
3    3     5  4
z
[1]
ID   1h   2h  3h
1    8     7  5
2    4     0  3
3    0     0  0
[2]
ID   1h   2h  3h
1    4     5  9
2    0     9  5
3    3     7  9
[3]
ID   1h   2h  3h
1    8     0  4
2    7     4  2
3    1     4  9

我希望结果采用 x 的第一个数据帧的 ID 并将其与第一个 y 数据帧的第一个 ID 和第一个 z 数据帧的第一个 ID 合并,看起来像这样,并对中的所有数据帧执行此操作列表

ID1 [1]
      x     y  z
1h    3     7  8
2h    5     3  7
3h    6     0  5

为了澄清更多,这里是每个列表的第三个数据框的第二个 ID 的示例

ID2 [3]
      x     y  z
1h    5     0  7
2h    5     5  4
3h    0     9  2

最后还将它们导出为 csv 文件,其名称包含 ID 号(1,2 或 3)以及列表中的哪个项目([1]、[2] 或 [3])谢谢!

标签: rlistdataframe

解决方案


如果我正确理解了您的问题,这应该可以解决问题。虽然不是最优雅的解决方案!

# function to extract the id's
extract_id <- function(x, y, z, id) {
  x <- x[x$ID == id, -1]
  y <- y[y$ID == id, -1]
  z <- z[z$ID == id, -1]
  
  id <- t(rbind(x, y, z))
  
  colnames(id) <- c("x", "y", "z")
  
  return(id)
}

# initialize new lists
ID1 <- list()
ID2 <- list()
ID3 <- list()

# loop over the data frames
for (a in 1:3) {
  ID1[[a]] <- extract_id(x = x[[a]],
                         y = y[[a]],
                         z = z[[a]],
                         id = 1)
  ID2[[a]] <- extract_id(x = x[[a]],
                         y = y[[a]],
                         z = z[[a]],
                         id = 2)
  ID3[[a]] <- extract_id(x = x[[a]],
                         y = y[[a]],
                         z = z[[a]],
                         id = 3)
}

# show everything
ID1
ID2
Id3

推荐阅读