跨多个数据集重命名特定列

时间:2017-12-25 00:43:28

标签: r

我有一批包含许多变量的数据集。我需要将每个数据集中的一些变量重命名为通用名称,而不更改其他变量。一个问题是我想要重命名的每个列位于每个数据集的不同位置,并且每个数据集具有不同数量的列。下面的示例数据和代码。

工作数据:

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

2 个答案:

答案 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)