【问题标题】:R subsetting from list based on comparison to data frame基于与数据框比较的列表中的 R 子集
【发布时间】:2015-08-31 10:10:35
【问题描述】:

我有一个包含一系列加载文件的列表。我希望对这个列表进行子集化,以从每个文件中获取与另一个数据框中的值匹配的结果。

例如下面的测试代码:

data.coords1 <- c(1,6,7,9,18)
data.lett1 <- c("T","T","G","C","T")

data1 <- cbind(data.coords1, data.lett1)

data.coords2 <- c(2,4,19,20)
data.lett2 <- c("G","T","G","C")

data2 <- cbind(data.coords2, data.lett2)

data.coords3 <- c(10,11,12,13,15,17)
data.lett3 <- c("C","T","C","C","T","G")

data3 <- cbind(data.coords3, data.lett3)

data.list <- list(data1, data2, data3)

ref.coords <- c(1:20)
ref.mark <- letters[1:20]
ref.MARK <- LETTERS[1:20]

ref <- cbind(ref.coords, ref.mark, ref.MARK)

我可以通过以下方式获得我想要的(对于一个列表元素):

desired.data <- merge(data2,ref, by.x="data.coords1",
                       by.y="ref.coords", sort=F)

但是我怎样才能轻松地为整个列表做到这一点呢?

【问题讨论】:

  • lapply(1:length(data.list), function(i) merge(data.list[[i]],ref, by.x=paste0("data.coords",i), by.y="ref.coords", sort=F)) 这样的东西可以吗?

标签: r list merge dataframe


【解决方案1】:
lapply(1:length(data.list), function(i) merge(data.list[[i]],ref, by.x=paste0("data.coords",i), by.y="ref.coords", sort=F))
[[1]]
  data.coords1 data.lett1 ref.mark ref.MARK
1            1          T        a        A
2            6          T        f        F
3            7          G        g        G
4            9          C        i        I
5           18          T        r        R

[[2]]
  data.coords2 data.lett2 ref.mark ref.MARK
1            2          G        b        B
2            4          T        d        D
3           19          G        s        S
4           20          C        t        T

[[3]]
  data.coords3 data.lett3 ref.mark ref.MARK
1           10          C        j        J
2           11          T        k        K
3           12          C        l        L
4           13          C        m        M
5           15          T        o        O
6           17          G        q        Q

【讨论】:

  • 感谢您的回答。它适用于示例代码,但我无法让它与我的真实数据一起使用。我收到了正在调查的错误 Error in fix.by(by.y, y) : 'by' must specify a uniquely valid column
  • 没问题。因此,在您的真实数据中,您没有像 data.coords1data.coords2data.coords3 等变量,还是 by.y 对于列表中的所有数据集都不相同?
  • 是的,就是这样,在我的真实数据中,每个列表元素中的列都是相同的。我花了一段时间才注意到出了什么问题,一定是累了。谢谢
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
相关资源
最近更新 更多