【问题标题】:Extracting same rows from multiple df´s and create new df从多个df中提取相同的行并创建新的df
【发布时间】:2019-06-22 10:19:36
【问题描述】:

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

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

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

【问题讨论】:

  • 欢迎来到 Stack Overflow!请使用appropriate formatting并正确语法,这一次我已经帮助你了。此外,我们在 Stack Overflow 上提供MCVE,请相应地编辑您的问题,干杯。
  • 确实请提供至少两个数据框的dput。否则请查看lapplydo.callrbind 等。

标签: r loops extract rows


【解决方案1】:

首先你需要列出你的对象,然后在上面应用你的过滤器:

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]

【讨论】:

  • 我已经更新了 data.table 示例,其中所有数据都合并到一个 data.table 中,我认为这是一种更简洁的方式
  • @luis_west 如果这对您有用,请随时接受并投票
猜你喜欢
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2022-11-15
  • 2020-11-12
相关资源
最近更新 更多