合并两个以上的数据框
Merging more than two data frames
我正在使用 R
合并两个以上的数据框。每个数据框对应一年的观察结果,并且有一列唯一标识一名员工。例如,两年来我会观察到:
emp.data <- data.frame(
emp_id = c (1:5),
emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
"2015-03-27")),
salary = c(623.3,515.2,611.0,729.0,843.25),
hours=c(100,56,34,65,38),
stringsAsFactors = FALSE
)
# Print the data frame.
print(emp.data)
(https://whosebug.com/image.jpg)
和:
emp.data2 <- data.frame(
emp_id = c (2:6),
emp_name = c("Dan","Michelle","Ryan","Gary","Zack"),
start_date = as.Date(c( "2013-09-23", "2014-11-15", "2014-05-11","2014-02-11",
"2015-03-27")),
salary = c(515.2,611.0,729.0,843.25,10),
hours=c(56,34,65,38,9),
stringsAsFactors = FALSE
)
# Print the data frame.
print(emp.data2)
请注意,我实际上是在处理一个 不平衡的面板 :这些年的列是相同的,但是这些年的观测值数量可能会有所不同。
基本上,我想将这些数据帧中的大约 10 个合并为一个,我尝试按以下方式使用函数 merge()
:
merge(emp.data,emp.data2,by = "emp_id",all.x = TRUE,all.y = TRUE)
然而,它使数据帧的维度与合并的数据帧数量成比例增加,因为它给了我输出列:例如 hours.x hours.y
。这显然是非常低效的,因为这些重复列中只有一个具有非 NA 值。所以基本上我正在寻找一种方法来合并这些数据框,同时保持列不变并添加一个年份变量。有什么建议吗?
## Put the data frames in a list:
list_of_data = list(emp.data, emp.data.2, emp.data.3, ...)
## alternately, do this programmatically, maybe
# list_of_data = mget(ls(pattern = emp.data.*))
## Name the list with the years
names(list_of_data) = c(1996, 2014, 1066, ...)
## Combine it
library(dplyr)
big_data = bind_rows(list_of_data, .id = "year")
有关这方面的更多详细信息,请参阅我在常见问题解答 How to make a list of data frames 中的回答。
我正在使用 R
合并两个以上的数据框。每个数据框对应一年的观察结果,并且有一列唯一标识一名员工。例如,两年来我会观察到:
emp.data <- data.frame(
emp_id = c (1:5),
emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
"2015-03-27")),
salary = c(623.3,515.2,611.0,729.0,843.25),
hours=c(100,56,34,65,38),
stringsAsFactors = FALSE
)
# Print the data frame.
print(emp.data)
和:
emp.data2 <- data.frame(
emp_id = c (2:6),
emp_name = c("Dan","Michelle","Ryan","Gary","Zack"),
start_date = as.Date(c( "2013-09-23", "2014-11-15", "2014-05-11","2014-02-11",
"2015-03-27")),
salary = c(515.2,611.0,729.0,843.25,10),
hours=c(56,34,65,38,9),
stringsAsFactors = FALSE
)
# Print the data frame.
print(emp.data2)
请注意,我实际上是在处理一个 不平衡的面板 :这些年的列是相同的,但是这些年的观测值数量可能会有所不同。
基本上,我想将这些数据帧中的大约 10 个合并为一个,我尝试按以下方式使用函数 merge()
:
merge(emp.data,emp.data2,by = "emp_id",all.x = TRUE,all.y = TRUE)
然而,它使数据帧的维度与合并的数据帧数量成比例增加,因为它给了我输出列:例如 hours.x hours.y
。这显然是非常低效的,因为这些重复列中只有一个具有非 NA 值。所以基本上我正在寻找一种方法来合并这些数据框,同时保持列不变并添加一个年份变量。有什么建议吗?
## Put the data frames in a list:
list_of_data = list(emp.data, emp.data.2, emp.data.3, ...)
## alternately, do this programmatically, maybe
# list_of_data = mget(ls(pattern = emp.data.*))
## Name the list with the years
names(list_of_data) = c(1996, 2014, 1066, ...)
## Combine it
library(dplyr)
big_data = bind_rows(list_of_data, .id = "year")
有关这方面的更多详细信息,请参阅我在常见问题解答 How to make a list of data frames 中的回答。