如何在数据表上循环播放?
我有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")
}
这不起作用..有一些方法可以做到这一点吗?
非常感谢:)
答案 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)