【问题标题】:subset multiple data tables using lapply使用 lapply 对多个数据表进行子集化
【发布时间】:2015-05-20 20:02:11
【问题描述】:

我有多个数据表,并且都有一个名为ID 的公共列。我有一个向量vec,其中包含一组ID 值。 我想使用lapply 对使用vec 的所有数据表进行子集化 我了解如何使用lapply 对数据表进行子集化,但我的问题是如何将子集化结果分配回原始数据表 这是我尝试过的:

 tables<-c("dt1","dt2","dt3","dt4")
 lapply(mget(tables),function(x)x[ID %in% vec,])

上面给出了所有数据表的子集,但我如何将它们分配回dt1,dt2,dt3,dt4?

【问题讨论】:

  • 如果您没有附加数据集,我认为ID 应该是x$ID(不建议附加)。此外,最好将其保留在列表中,而不是在全局环境中拥有许多对象。如果您坚持,可以使用list2env。它。 lst &lt;- lapply(mget(tables),function(x)x[ID %in% vec,]); list2env(lst, envir=.GlobalEnv)
  • 感谢 akrun,我从未使用过 list2env,但似乎可以正常工作。一个问题:我在 R 闪亮的应用程序中使用它。将列表转换为全局环境中的对象 - 会干扰其他用户会话吗?
  • 我不明白other user sessions。全局环境中有很多对象一般都不好

标签: r lapply


【解决方案1】:

我会将数据集保留在列表中,而不是在全局环境中更新数据集对象,因为大多数操作都可以在列表中完成(包括读取文件和写入输出文件)。但是,如果您坚持,我们可以使用list2env,它将使用子集数据集更新原始数据集对象

 lst <- lapply(mget(tables),function(x)x[ID %in% vec,])
 list2env(lst, envir=.GlobalEnv)

【讨论】:

    【解决方案2】:

    您也可以只命名列表中的数据集:

    tables <- c("dt1","dt2","dt3","dt4")
    dflist <- lapply(mget(tables),function(x)x[ID %in% vec,])
    dflist <- setNames(dflist, tables)
    

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 2021-05-25
      • 2013-07-21
      • 1970-01-01
      相关资源
      最近更新 更多