我有两个大小不同的数据框。例:
t1 <- data.frame("id"=c(1,1,1,2,2,2,4,5,5,5,6,7,8),"condition"=c(3,3,1,5,5,5,10,10,5,5,2,3,1) )
t2 <- data.frame("ind"=c(1,2,4,5,6,7,8),"test_c"=c(3,5,10,10,2,3,1), "time"=c(32,55,21,34,55,22,19))
我想根据两个条件来匹配案例:t1$id==t2$ind
并根据这两个条件下t1$condition==t2$test_c
变量的结果在t1中创建一个附加列t2$time
。
预期结果:
t3 <- data.frame("id"=c(1,1,1,2,2,2,4,5,5,5,6,7,8),"condition"=c(3,3,1,5,5,5,10,10,5,5,2,3,1) , "time"=c (32,32,NA,55,55,55,21,34,NA,NA,55,22,19))
我怀疑应该使用merge
或match
函数,但不确定哪种方法正确。
> out <- merge(t1, t2, by.x=c("id","condition"), by.y=c("ind","test_c"), all.x=TRUE)
> out
id condition time
1 1 1 NA
2 1 3 32
3 1 3 32
4 2 5 55
5 2 5 55
6 2 5 55
7 4 10 21
8 5 5 NA
9 5 5 NA
10 5 10 34
11 6 2 55
12 7 3 22
13 8 1 19
library(dplyr)
left_join(t1, t2, by = c("id" = "ind", "condition" = "test_c"))
t3
它们之间有一些区别。为了显示起见,我将它们并排显示,以便进行比较。
cbind(out[with(out,order(id,condition)),], t3[with(t3,order(id,condition)),])
# id condition time id condition time
# 1 1 1 NA 1 1 NA
# 2 1 3 32 1 3 32
# 3 1 3 32 1 3 32
# 4 2 5 55 2 5 55
# 5 2 5 55 2 5 NA
# 6 2 5 55 2 5 NA
# 7 4 10 21 4 10 21
# 8 5 5 NA 5 5 NA
# 9 5 5 NA 5 5 NA
# 10 5 10 34 5 10 34
# 11 6 2 55 6 2 55
# 12 7 3 22 7 3 22
# 13 8 1 19 8 1 19
唯一的区别是与id=2,condition=5
,其中中的所有字符merge
都分配了相同的time=55
,而您t3
仅填充了它们中的第一个。我不认为这是“仅第一”的逻辑,因为还有其他重复id,condition
没有引起相同的响应。我怀疑这只是示例数据中的一个错误,或者可能是merge
您尚未告诉我们的后期处理:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句