如何解决合并两个以上的数据帧
我正在使用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://stackoverflow.com/image.jpg)
和:
emp.data2 <- data.frame(
emp_id = c (2:6),emp_name = c("Dan","Gary","Zack"),start_date = as.Date(c( "2013-09-23","2014-02-11",salary = c(515.2,843.25,10),hours=c(56,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值。因此,从本质上讲,我正在寻找一种合并这些数据帧的方法,同时保持列不变并添加Year变量。有什么建议吗?
解决方法
## 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中的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。