【发布时间】:2020-03-04 13:53:37
【问题描述】:
我想在一个循环中更改几个df中的列名,其中新的列名取决于df的名称:
library(dplyr)
# A simple example of my data:
dataframe_AA <- data.frame(
var1 = sample(1:3),
var2 = sample(1:3),
var3 = sample(1:3))
dataframe_AB <- data.frame(
var1 = sample(1:3),
var2 = sample(1:3),
var3 = sample(1:3))
dfs <- list(dataframe_AA, dataframe_AB)
combinations <- c("AA", "AB")
oldnames = c("var1", "var2", "var3")
for (df in seq_along(dfs)) {
for (combi in combinations) {
newnames = paste(oldnames, substr = substring(combi,1,2), sep = "_")
df <- df %>% rename_at(vars(oldnames), ~newnames)
}
}
#Expected outcome:
names(dataframe_AA)
[1] "var1_AA" "var2_AA" "var3_AA"
names(dataframe_AB)
[1] "var1_AB" "var2_AB" "var3_AB"
newnames 在循环内成功创建,但随后我收到错误消息:Error in UseMethod("tbl_vars") :
no applicable method for 'tbl_vars' applied to an object of class "c('integer', 'numeric')"
但是,在循环之外执行所有操作都可以:
df = dataframe_AA
combi = "AA"
newnames = paste(oldnames, substr = substring(combi,1,2), sep = "_")
df <- df %>% rename_at(vars(oldnames), ~newnames)
print(names(df))
[1] "var1_AA" "var2_AA" "var3_AA"
我不明白我在这里做错了什么以及如何让它循环工作。
【问题讨论】: