【问题标题】:How to subset a list of data frames using a vector如何使用向量对数据帧列表进行子集化
【发布时间】:2020-10-04 22:19:10
【问题描述】:

我刚刚开始使用 R 中的列表,但我遇到了一个似乎无法解决的问题,因为我不知道如何对列表进行子集化或过滤。 我有一个包含 9 个数据框的列表

List of 9
 $ :'data.frame':   41999 obs. of  2 variables:
  ..$ XY_ID : chr [1:41999] "193.722:175.733" "192.895:176.727" "187.065:178.285" "190.754:178.186" ...
  ..$ CellID: int [1:41999] 0 0 7 0 0 7 8 8 7 8 ...
 $ :'data.frame':   42069 obs. of  2 variables:
  ..$ XY_ID : chr [1:42069] "192.895:176.727" "187.065:178.285" "190.754:178.186" "192.296:178.648" ...
  ..$ CellID: int [1:42069] 0 7 7 0 8 7 8 8 7 8 ...
 $ :'data.frame':   42116 obs. of  2 variables:
  ..$ XY_ID : chr [1:42116] "192.296:178.648" "178.899:180.92" "182.416:181.265" "186.806:181.434" ...
  ..$ CellID: int [1:42116] 0 8 8 7 7 8 7 8 7 7 ...
 $ :'data.frame':   41976 obs. of  2 variables:
  ..$ XY_ID : chr [1:41976] "193.722:175.733" "190.654:176.113" "188.362:176.407" "192.895:176.727" ...
  ..$ CellID: int [1:41976] 0 7 7 0 7 7 7 7 8 7 ...
 $ :'data.frame':   41949 obs. of  2 variables:
  ..$ XY_ID : chr [1:41949] "190.654:176.113" "188.362:176.407" "192.895:176.727" "186.064:177.413" ...
  ..$ CellID: int [1:41949] 0 0 0 7 7 0 0 7 7 8 ...
 $ :'data.frame':   42020 obs. of  2 variables:
  ..$ XY_ID : chr [1:42020] "190.754:178.186" "192.296:178.648" "189.421:179.012" "186.453:179.2" ...
  ..$ CellID: int [1:42020] 0 0 0 7 7 7 7 7 8 8 ...
 $ :'data.frame':   41902 obs. of  2 variables:
  ..$ XY_ID : chr [1:41902] "191.802:173.732" "193.722:175.733" "183.882:176.123" "190.654:176.113" ...
  ..$ CellID: int [1:41902] 0 0 7 0 0 0 8 7 7 0 ...
 $ :'data.frame':   42072 obs. of  2 variables:
  ..$ XY_ID : chr [1:42072] "190.754:178.186" "192.296:178.648" "189.421:179.012" "178.899:180.92" ...
  ..$ CellID: int [1:42072] 0 0 0 8 7 8 7 7 8 7 ...
 $ :'data.frame':   41956 obs. of  2 variables:
  ..$ XY_ID : chr [1:41956] "193.722:175.733" "190.654:176.113" "188.362:176.407" "192.895:176.727" ...
  ..$ CellID: int [1:41956] 0 0 7 0 8 7 7 7 7 8 ...

其中第一列是 XY_ID,第二列称为 CellID。 我还有一个带有所有 9 个数据帧(第 1 列)共有的 YX_ID 的向量。我像这样提取了这些常见的 XY_ID:

csv4 <- Reduce(intersect, lapply(csv3, function(x){
    x[['XY_ID']]
}))

str(csv4)
 chr [1:35368] "192.296:178.648" "182.416:181.265" "186.806:181.434" "188.737:181.429" ...

现在我要做的是为 csv4(向量)中的每个 XY_ID 找到 csv3 中每个数据场的第 1 列(XY_ID)中的匹配项,并打印与之配套的 CellID。

输出应该是这样的:

【问题讨论】:

    标签: r dataframe tidyverse purrr


    【解决方案1】:

    我们可以循环listsubset 数据集和rbind 数据集do.call

    out1 <- do.call(rbind, lapply(csv3, function(x) subset(x, XY_ID %in% csv4)))
    

    或者另一个选项是map

    library(dplyr)
    library(purrr)
    out2 <- map_dfr(csv3, ~ .x  %>%
                              filter(XY_ID %in% csv4))
    

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多