df1$V1<-ifelse((df1$Class==df2$Class & df1$Count==df2$Count),df2$Code,df1$V1)
df1
Class Count V1 V2 V3
1 E 124 1241 2 2
2 E 123 2 0 0
3 L 100 5 5 5
4 L 111 1234 1 1
5 E 120 3 3 3
根据评论中提供的数据更新:
您可以在两个数据中使用 c9 和 CC4 创建一个交互变量(int)interaction
,然后使用%in%
(似乎您不是在寻找行到行匹配,所以您应该避免使用ifelse
)。c9
我建议您在使用 NA 时和CC4
之前处理 NA interaction
。这是因为如果其中之一是 NA 则 int 的值将是您可能不希望匹配的 NA(在以下示例中,我没有处理 NA)。
df1$int<-interaction(df1$c9,df1$CC4) #z data is df1 and z1 data is df2
df2$int<-interaction(df2$c9,df2$CC4)
df1[df1$int %in% df2$int,5]<-df2[df2$int %in% df1$int,13] #this will replaces col5 of df1 with col13 of df2 if matches occurs otherwise the value of col5 of df1 will be same as before
输出:
> df1
c1 c2 c9 CC4 A.la.vista Montoxv_a120d Montoxv_a15d Montoxv_a186d Montoxv_a30d Montoxv_a60d Montoxv_a7d Montoxv_a90d int
1 20130830 192 E 111 39324363.19 0 0.0 0.0 0 0 1550000 0 E.111
2 20130830 192 E 124 71061061.04 0 0.0 69608583.8 1452477 0 0 0 E.124
3 20130830 192 E 131 0.00 0 182694.0 0.0 1027283 3308932 2010328 3809021 E.131
4 20130830 192 E 201 66310498.77 0 0.0 0.0 0 0 0 0 E.201
5 20130830 192 E 202 0.00 34403130 10275256.6 40375044.8 17999369 37156810 8953196 32639408 E.202
6 20130830 192 E 203 51885967.69 0 0.0 0.0 0 0 0 0 E.203
7 20130830 192 E 211 3537648.29 0 0.0 0.0 0 0 0 0 E.211
8 20130830 192 E NA NA 8181927 314120.5 10816365.6 3295626 11992733 3025800 4673335 <NA>
9 20130830 192 L 101 64013.84 0 0.0 0.0 0 0 0 0 L.101
10 20130830 192 L 111 5429375.87 5000000 0.0 0.0 11000000 8500000 7500000 9900000 L.111
11 20130830 192 L 121 8869286.40 0 0.0 7874386.4 0 994900 0 0 L.121
12 20130830 192 L 123 8805450.00 2200000 0.0 2005700.0 1299000 1300750 0 2000000 L.123
13 20130830 192 L 124 5408668.05 0 0.0 5408668.0 0 0 0 0 L.124
14 20130830 192 L 131 0.00 0 2539885.0 0.0 0 8498099 694912 3793809 L.131
15 20130830 192 L 141 18150400.00 0 0.0 15510400.0 1000000 150000 0 1490000 L.141
16 20130830 192 L 201 4545930.38 0 0.0 0.0 0 0 0 0 L.201
17 20130830 192 L 202 0.00 0 0.0 510609.7 0 1187226 0 95000 L.202
18 20130830 192 L 203 708863.95 0 0.0 0.0 0 0 0 0 L.203
要查看 df1 匹配的哪一行,请使用
> which(df1$int %in% df2$int)
[1] 2 6 11 12 13 15 18