我需要在R.中分析3个.csv文件。文件一包含具有用户ID和signupdate的列。文件二包含具有用户ID,购买日期和购买量的列。文件三包含具有用户ID,消息日期和消息数量的列。
请注意,三个文件中每个文件的用户ID顺序都不相同,因此警察。
非常乐意帮助合并这些文件,以便大型数据集具有订单用户ID,注册日期,购买日期,购买量,消息日期和消息数量。似乎无法在R中找到执行此操作的代码 提前致谢
答案 0 :(得分:3)
虽然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
的顺序不相同,但值为match
。
如果您有不匹配的数据并希望保留所有可能的行,则需要通过向all=TRUE
提供merge
来进行外部联接。由于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 8
NA
用于表示不匹配行中的数据。