首页 > 解决方案 > 如何运行一个 for 循环子集多个列表,所有这些列表都包含数据帧

问题描述

我有 5 个名为“夜总会”、“医院”、“酒吧”、“景点”、“social_facility”的列表,所有这些列表都包含一个名为 osm_points 的数据框。我想创建一个包含 5 个数据帧的新列表,其中原始数据帧的名称仅包含 3 个向量“osm_id”、“name”、“addr.postcode”,向量“addr.postcode”没有 NA 值。下面是我尝试的代码,我不知道没有 $ (这给我一个错误的原子向量)或没有方括号的列表子集的另一种方法。让知道你们是否有一些建议。

vectors <- c("osm_id","name","addr.postcode")
features <- c("nightclub", "hospital", "bar", "attraction", "social_facility")
datasets <- list()
n <- 0


for (i in features){
  n <- n + 1
  datasets[[n]] <- paste(i)[["osm_points"]][!is.na(paste(i)[["osm_points"]][["addr.postcode"]]), variables]
}

我设法在没有 for 循环的情况下执行此操作(如下),但我希望能够更好地编码并在一个操作中完成所有操作。非常感谢你的帮助。

nightclub1 <- nightclub$osm_points[!is.na(nightclub$osm_points$addr.postcode), variables]

谢谢 !!

标签: r

解决方案


尝试使用此代码lapply

result <- lapply(mget(features), function(x) 
                 x$osm_points[!is.na(x$osm_points$addr.postcode), vectors])

result应该有 5 个数据框的列表,每个数据框features只有vectors一列,没有NA.addr.postcode


推荐阅读