【问题标题】:How to Add Dataframe name to Columns from Multiple Dataframes如何将数据框名称添加到来自多个数据框的列
【发布时间】:2018-01-13 03:09:25
【问题描述】:

目标是重命名数据框列列表,但同时将数据框名称添加到新列名称中。

例如:从 x 到 a_x 和 b_x。

为什么?因为我计划稍后合并这些集合并希望为列提供干净的 id。

a = data.frame(x = c(1,2))
b = data.frame(x = c(3,4))

frameList = list(a = a, b = b)

newName = c(*frameName+'_'+'x')
names = lapply(names, setNames, nm = newName)
list2env(names,.GlobalEnv)

【问题讨论】:

    标签: r lapply


    【解决方案1】:

    这是适合您的一种方法。我使用frameList 的长度循环遍历frameList 中的每个数据帧。对于每个数据框中的列名,我取了一个数据框的名称(即names(frameList))并将其传递给数据框中的列名。

    a = data.frame(x = c(1,2), y = 1:2)
    b = data.frame(x = c(3,4), y = 1:2)
    
    frameList = list(a = a, b = b)
    
    lapply(1:length(names(frameList)), function(x) {
    
           names(frameList[[x]]) <- paste(names(frameList)[x], names(frameList[[x]]), sep = "_")
    
           return(frameList[[x]])
    
    })
    
    [[1]]
      a_x a_y
    1   1   1
    2   2   2
    
    [[2]]
      b_x b_y
    1   3   1
    2   4   2
    

    【讨论】:

    • @chachimouchacha 很高兴为您提供帮助。
    【解决方案2】:

    或者另一个选项是Map

    Map(function(x, y) setNames(x, paste(y, names(x),  sep="_")), frameList, names(frameList))
    #$a   
    #   a_x a_y
    #1   1   1
    #2   2   2
    
    #$b
    #  b_x b_y
    #1   3   1
    #2   4   2
    

    tidyverse

    library(purrr)
    library(dplyr)
    f1 <- function(x, y) paste(y, x, sep="_")
    map2(frameList, names(frameList), ~ .x %>% 
                                          rename_all(f1, .y))
    

    如果我们需要它以相反的顺序,这更简单

    map2(frameList, names(frameList), ~ .x %>%
                                rename_all(paste, sep="_", .y))
    

    【讨论】:

    • 简单得多。 :)
    • @jazzurro 谢谢,我一直在寻找 tidyverse 选项,但 rename_at 似乎有问题
    • 他们甚至有rename_at?我在 CRAN 手册 0.7.4 版中没有看到这一点。你试过在Map()中使用它吗?
    • @jazzurro 是的,他们确实拥有一整套功能。我在map2 中使用过它。更新了帖子
    • 我知道 filter_at/all/if。现在我有更多的事情要赶上。我也需要学习purrr。我最近更喜欢为我的工作学习分析包,但我无法同时学习所有内容。 purrr 现在稳定了吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多