【问题标题】:Rename specific columns across multiple data sets跨多个数据集重命名特定列
【发布时间】:2017-12-25 00:43:27
【问题描述】:

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

工作数据:

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 &lt;- list(df2$help = df2$help... 命令中收到以下错误:

Error: unexpected '=' in "dfs <- list(df2$help ="

我能找到的所有示例都没有显示如何跨数据集更改特定列,仅显示如何更改所有列名或只有几列的数据集中的change a small number of columns

【问题讨论】:

    标签: r


    【解决方案1】:

    这就是你要找的东西:

     dat=lapply(list(df2=df2,df3=df3),function(x){names(x)[which(names(x)=="help")]="var2";x})
     list2env(dat,.GlobalEnv)
    

    【讨论】:

    • 感谢@onyambu,但这仅适用于数据集具有相同数量或列和/或需要更改的列位于相同位置的情况。我的数据集不是那样的。我更新了示例数据,使其更符合我的实际数据。我希望我可以“调出”数据集中的每一列并重命名,不管每个数据集中的列位置或列数。
    • 那么在这种情况下您想提供什么具体名称来提供帮助?
    • 在每个数据集中,我想将help更改为var2,无论其在各自数据集中的位置如何。
    • 我将 var2 中的 df3 更改为 newCol。有关更多上下文,我的真实数据有两个不同的收入名称:incomehhIncome。在合并数据集之前,我需要将所有 hhIncomes 更改为 income。每个数据集在不同的列位置都有incomehhIncome,因为它们在每个新的调查数据集合中添加和删除了变量。
    【解决方案2】:

    这是tidyverse的解决方案

    library(tidyverse)
    
    list(df1, df2, df3) %>% 
    map(~if("help" %in% names(.x))rename(.x, var2=help) else .x)
    

    【讨论】:

    • 谢谢@dmi3kno。有没有办法重命名全局环境中的列?
    • 最后加%&gt;% list2env(.GlobalEnv)
    猜你喜欢
    • 2021-03-16
    • 2021-06-02
    • 2019-10-26
    • 2018-12-21
    • 2019-12-30
    • 2019-08-25
    • 2019-08-18
    • 2018-10-27
    • 2021-10-08
    相关资源
    最近更新 更多