我有3个.csv文件,我需要在R中分析。文件一个包含用户id和信号更新的列。文件二包含用户id、购买日期和购买金额的列。文件三包含具有用户id、消息日期和消息数量的列。
请注意,在这三个文件中,用户id的顺序并不相同,因此cop。
我希望有一些帮助合并这些文件,使大型数据集有订单用户id,信号更新,购买日期,购买金额,消息日期和消息数量。似乎找不到在R中执行此操作的代码,谢谢
发布于 2014-08-21 10:35:21
虽然merge没有接受三个参数,但Reduce是为迭代列表和将对传递给函数的任务而设计的。下面是一个三向合并的示例:
d1 <- data.frame(id=letters[1:3], x=2:4)
d2 <- data.frame(id=letters[3:1], y=5:7)
d3 <- data.frame(id=c('b', 'c', 'a'), z=c(5,6,8))
Reduce(merge, list(d1, d2, d3))
## id x y z
## 1 a 2 7 8
## 2 b 3 6 5
## 3 c 4 5 6请注意,列id的顺序不同,但值是matched的。
如果您有不匹配的数据,并且希望保留所有可能的行,则需要一个外部连接,方法是向merge提供all=TRUE。由于Reduce无法将其他参数传递给函数,因此必须创建一个新函数来调用merge
d1 <- data.frame(id=letters[1:3], x=2:4)
d2 <- data.frame(id=letters[3:1], y=5:7)
d3 <- data.frame(id=c('b', 'c', 'd'), z=c(5,6,8))
Reduce(function(x,y) merge(x,y,all=TRUE), list(d1, d2, d3))
## id x y z
## 1 a 2 7 NA
## 2 b 3 6 5
## 3 c 4 5 6
## 4 d NA NA 8NA用于指示不匹配行中的数据。
https://stackoverflow.com/questions/25417177
复制相似问题