我有一批包含许多变量的数据集。我需要将每个数据集中的一些变量重命名为通用名称,而不更改其他变量。一个问题是我想要重命名的每个列位于每个数据集的不同位置,并且每个数据集具有不同数量的列。下面的示例数据和代码。
工作数据:
package(tidyverse)
df1 <- tribble(
~var1, ~var2, ~var3, ~var4, ~var5,
"1", "1", "1", "a", "d",
"2", "2", "2", "b", "e",
"3", "3", "3", "c", "f"
)
df2 <- tribble(
~var1, ~help, ~var3,
"1", "1", "1",
"2", "2", "2",
"3", "3", "3"
)
df3 <- tribble(
~var1, ~newCol, ~var3, ~help, ~var5, ~var6,
"1", "4", "1", "a", "d", "1",
"2", "5", "2", "b", "e", "2",
"3", "6", "3", "c", "f", "3"
)
我想将help
重新编码为var2
,因此它在数据集中很常见。我知道我可以使用dplyr
这样单独执行此操作:
df2 <- df2 %>%
rename(var2 = help)
df3 <- df3 %>%
rename(var2 = help)
但我必须在100多个数据集中执行此操作,并且我希望更有效地执行此操作。我使用来自this帖子的建议答案作为示例,但它仅适用于具有相同数量和列顺序的数据集,而我的不是。我试过这个,但它不起作用:
dfs <- list(df2$help = df2$help, df3$help = df3$help)
colnames <- c("var2", "var2")
list2env(lapply(dfs, setNames, colnames), .GlobalEnv)
但是我在dfs <- list(df2$help = df2$help
...命令中收到以下错误:
Error: unexpected '=' in "dfs <- list(df2$help ="
我找到的所有示例都没有显示如何更改数据集中的特定列,只显示如何更改所有列名称或仅包含几列的数据集中的change a small number of columns。
答案 0 :(得分:1)
这就是你要找的东西:
dat=lapply(list(df2=df2,df3=df3),function(x){names(x)[which(names(x)=="help")]="var2";x})
list2env(dat,.GlobalEnv)
答案 1 :(得分:1)
以下是tidyverse
library(tidyverse)
list(df1, df2, df3) %>%
map(~if("help" %in% names(.x))rename(.x, var2=help) else .x)