R;如何在数据表上构建“ for”循环?

时间:2019-07-30 05:29:55

标签: r

如何在数据表上循环播放?

我有6个数据表,名为'tax2015''tax2016''tax2017'...'tax2020'。

它们具有相同的标题[月,税,平均]。

我正在尝试将每个标头的第三个名称从“ average”更改为“ sum”。

让我们假设有6个数据表,它们的名称与上面一样,每个数据表都是12乘3。

for (x in tax2015) {
   names(x)[3] <- paste("sum")
}

我编写了这样的代码,但它不起作用。不知道为什么。

F <- function(a){
   if(1>0){
      for (x in a)
      names(x)[3] <- paste("sum")
   }
   return(x)
}

F(tax2015)

也尝试过此方法,但不起作用。

此外,如何一次处理6个串行数据。表'tax2015''tax2016''tax2017'...'tax2020'一次?

喜欢..

for(x in tax2015:tax2020) {
   names(x)[3] <- paste("sum")
}

这不起作用..有一些方法可以做到这一点吗?

非常感谢:)

2 个答案:

答案 0 :(得分:1)

手动将它们放入列表中,或使用具有特定模式的mget

list_df <- mget(ls(pattern = "tax\\d+"))
#list_df <- list(tax2015, tax2016, tax2017, ...)

然后使用lapply在特定位置更改名称

list_df <- lapply(list_df, function(x) {names(x)[3] <- "sum";x})

您可以将数据框保留在列表中,也可以将它们放在单独的数据框中

list2env(list_df, .GlobalEnv)

考虑此示例

tax2015 <- data.frame(month = 1:5, tax = 6:10, average = 11:15)
tax2016 <- data.frame(month = 1:5, tax = 6:10, average = 11:15)
tax2017 <- data.frame(month = 1:5, tax = 6:10, average = 11:15)
list_df <- mget(ls(pattern = "tax\\d+"))

list_df <- lapply(list_df, function(x) {names(x)[3] <- "sum";x})

list_df
#$tax2015
#  month tax sum
#1     1   6  11
#2     2   7  12
#3     3   8  13
#4     4   9  14
#5     5  10  15

#$tax2016
#  month tax sum
#1     1   6  11
#2     2   7  12
#3     3   8  13
#4     4   9  14
#5     5  10  15

#$tax2017
#  month tax sum
#1     1   6  11
#2     2   7  12
#3     3   8  13
#4     4   9  14
#5     5  10  15

答案 1 :(得分:1)

由于每种情况下的列都是相同的,所以我将从数据帧列表开始,或者将它们组合为一个,而不是将它们分开。

使用bind_rows()中的dplyr很容易,它还提供了有用的rename()功能。

library(dplyr)

new_df <- list(tax2015 = tax2015,
               tax2016 = tax2016,
               tax2017 = tax2017,
               tax2018 = tax2018,
               tax2019 = tax2019,
               tax2020 = tax2020) %>%
  bind_rows(.id = "id") %>%
  rename(sum = average)