从多个df中提取相同的行并创建新的df

时间:2019-06-22 10:19:36

标签: r loops extract rows df

我想从我的数据框中提取13行(不同年份,都相等)。然后,每年仅用这13行创建一个新的df。 有没有办法解决这个问题? 还是将其应用到df的列表中?

这很好用,但我不想每年都使用它:

bezirke_abs12 <- Year_ABS3[c(1, 13, 23, 41, 60, 71, 81, 90, 102, 124, 135, 149, 164), ]

1 个答案:

答案 0 :(得分:0)

首先,您需要列出对象列表,然后对其应用过滤器:

years <- ls(pattern = "^Year")

filter.values <- c(1, 13, 23, 41, 60, 71, 81, 90, 102, 124, 135, 149, 164)
lapply(years, function(x) {
  assign(paste0(x, "_output"),  get(x)[filter.values, ], envir = globalenv())
})

但是,我不建议您这样做。

相反,您可以使用data.table::rbinlist()idcol参数将数据集合并为一个。

您的所有数据都整齐地放在data.framedata.table中,这一点要干净得多。

您可以执行以下操作:

library(data.table)
year.names <- ls(pattern = "^Year_\\d$")
years <- lapply(year.names, get)
names(years) <- year.names 
years <- rbindlist(years, idcol = "year")
years[, rn := 1:.N, by = year]
res <- years[rn %in% filter.values]