我需要从多个年度(横截面)数据集创建面板数据集(长格式)。感兴趣的变量在单个数据集中具有不同的名称,我需要协调它们。
我将数据帧加载到列表中,现在想要使用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
答案 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