【问题标题】:Using a for loop in R to loop through the name of dataframes在 R 中使用 for 循环遍历数据帧的名称
【发布时间】:2021-01-03 13:34:49
【问题描述】:

我有各种公司 20 年的合并数据。我在 R 中使用了一个“for”循环来分离每年的数据,这在全球环境中为我提供了 20 个数据框。每个数据框都由其年份标识:Merger2000 到 Merger2019,共 20 年。现在我想编写另一个 for 循环来查找每个数据框中的唯一公司(即每年的唯一公司)。每个公司都由唯一的公司代码 (co_code) 标识。我知道如何分别为每一年做这件事。例如,对于 2000 年,我会这样做:

uniquemerger2000 % distinct(co_code, .keep_all = TRUE)

如何运行 for 循环以在所有年份(即从 2000 年到 2019 年)启用此操作?代码中需要一些索引,但我不确定如何循环操作。

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 为什么不使用year 变量创建单个数据框?如果您有 20 个变量,它们的名称仅在末尾附加一个数字不同,则可能有一个数据结构等待诞生。

标签: r for-loop


【解决方案1】:

通常最好将数据保存在一个数据框或列表中,而不是在全局环境中保存多个此类对象。

您可以创建一个列表对象 (list_data) 将所有数据帧放在一起,并使用 lapply/map 保留每个数据帧的唯一行。

library(dplyr)
library(purrr)

list_data <- mget(paste0('Merger', 2000:2019))
result <- map(list_data, ~.x %>% distinct(co_code, .keep_all = TRUE))

或者在基础 R 中:

result <- lapply(list_data, function(x) x[!duplicated(x$co_code), ])

【讨论】:

  • 谢谢罗纳克。这非常有帮助。我可以问一个相关的问题吗?在我得到包含所有数据框列表的结果(保留每个数据框的唯一行)后,如果我想创建一个频率表,计算每年数据框的行数(换句话说,每年的唯一公司),你会知道我该怎么做吗?
  • 您可以在lapply 中使用table。类似result &lt;- lapply(list_data, function(x) table(x$year))
猜你喜欢
  • 2021-06-25
  • 2021-12-03
  • 2021-11-22
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2021-12-25
相关资源
最近更新 更多