使用非协调列名

时间:2018-02-26 12:08:38

标签: r

我需要从多个年度(横截面)数据集创建面板数据集(长格式)。感兴趣的变量在单个数据集中具有不同的名称,我需要协调它们。

我将数据帧加载到列表中,现在想要使用lapply或允许绑定数据帧的一大块代码来操作名称。我可以看到这样做的几种方法,但是想使用一个在大型data.frames列表上使用少量代码的方法,这样我就可以为几个变量执行此操作,并在以后轻松更改细节。

所以我要找的是一种重命名列的方法,这样我就可以简单地使用dplyr中的bind_rows()或等效方法,或者一步重命名和绑定数据集。由于我需要为几个变量执行此操作,因此将两个步骤分开可能更安全。

为了说明,这里有一个例子:

a <- data.frame(id=c("Marc", "Julia", "Rico"), year=2000:2002, laborincome=1:3)
b <- data.frame(id=c("Marc", "Julia", "Rico"), earningsfromlabor=2:4, year=2003:2005)
dflist <- list(a, b)

equivalent_vars <- c("laborincome", "earningsfromlabor")
newnanme <- "income"

期望的结果:

data.frame(id = c(“Marc”,“Julia”,“Rico”),收入= c(1,2,3,2,3,4),年份= 2000:2005)

     id income year
1  Marc      1 2000
2 Julia      2 2001
3  Rico      3 2002
4  Marc      2 2003
5 Julia      3 2004
6  Rico      4 2005

1 个答案:

答案 0 :(得分:1)

我们可以使用setnames

中的data.table
library(data.table)
do.call(rbind, Map(setnames, dflist, old = equivalent_vars, new = newnanme))
#     id year income
#1  Marc 2000      1
#2 Julia 2001      2
#3  Rico 2002      3
#4  Marc 2003      2
#5 Julia 2004      3
#6  Rico 2005      4

或者我们可以使用:=

library(dplyr)
library(purrr)
map2_df(dflist, equivalent_vars, ~ .x %>%
                 rename(!! (newnanme) := !! .y)) %>%
       select(id, income, year)
#     id income year
#1  Marc      1 2000
#2 Julia      2 2001
#3  Rico      3 2002
#4  Marc      2 2003
#5 Julia      3 2004
#6  Rico      4 2005