You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用dplyr的_join函数合并数据框且无NA值?

问题:合并DataFrame时predict值大量NA且表格冗余的解决办法

问题描述

尝试将第二个DataFrame的predict变量值匹配到第一个DataFrame的mean变量值,使用full_join函数后,结果中除一条记录外其余predict值均为NA,且表格出现冗余扩展。

第一个表格(e1RTbits)

# A tibble: 20 × 6
    sd_RT   seRT bits  valid   value  mean
    <dbl>  <dbl> <chr> <chr>   <chr> <dbl>
 1 0.134  0.0291 0.029 invalid 50    0.734
 2 0.106  0.0232 0.029 valid   50    0.611
 3 0.162  0.0353 0.029 invalid 1     0.812
 4 0.143  0.0313 0.029 valid   1     0.675
 5 0.129  0.0282 0.29  invalid 50    0.742
 6 0.0807 0.0181 0.29  valid   50    0.578
 7 0.129  0.0289 0.29  invalid 1     0.798
 8 0.141  0.0308 0.29  valid   1     0.667
 9 0.162  0.0353 0.53  invalid 50    0.798
10 0.100  0.0219 0.53  valid   50    0.590
11 0.162  0.0353 0.53  invalid 1     0.835
12 0.118  0.0257 0.53  valid   1     0.630
13 0.198  0.0433 0.60  invalid 50    0.798
14 0.101  0.0221 0.60  valid   50    0.595
15 0.148  0.0322 0.60  invalid 1     0.854
16 0.120  0.0261 0.60  valid   1     0.646
17 0.174  0.0379 0.86  invalid 50    0.783
18 0.115  0.0251 0.86  valid   50    0.604
19 0.140  0.0314 0.86  invalid 1     0.830
20 0.133  0.0291 0.86  valid   1     0.650

第二个表格(temp2)

predict  mean
     <dbl> <dbl>
 1   0.587 0.604
 2   0.800 0.783
 3   0.646 0.650
 4   0.859 0.851
 5   0.593 0.595
 6   0.782 0.798
 7   0.652 0.646
 8   0.841 0.854
 9   0.594 0.590
10   0.778 0.798
11   0.654 0.630
12   0.837 0.835
13   0.600 0.591
14   0.761 0.742
15   0.660 0.667
16   0.820 0.819
17   0.606 0.611
18   0.744 0.734
19   0.665 0.675
20   0.804 0.812

原使用代码

temp3 <- full_join(e1RTbits, temp2, by = c("mean", "predict"))

输出结果

# A tibble: 39 × 7
     sd_RT    seRT bits  valid   value  mean predict
     <dbl>   <dbl> <chr> <chr>   <chr> <dbl>   <dbl>
 1  0.134   0.0291 0.029 invalid 50    0.734  NA    
 2  0.106   0.0232 0.029 valid   50    0.611  NA    
 3  0.162   0.0353 0.029 invalid 1     0.812  NA    
 4  0.143   0.0313 0.029 valid   1     0.675  NA    
 5  0.129   0.0282 0.29  invalid 50    0.742  NA    
 6  0.0807  0.0181 0.29  valid   50    0.578  NA    
 7  0.129   0.0289 0.29  invalid 1     0.798  NA    
 8  0.141   0.0308 0.29  valid   1     0.667  NA    
 9  0.162   0.0353 0.53  invalid 50    0.798  NA    
10  0.100   0.0219 0.53  valid   50    0.590   0.594
11  0.162   0.0353 0.53  invalid 1     0.835  NA    
12  0.118   0.0257 0.53  valid   1     0.630  NA    
13  0.198   0.0433 0.60  invalid 50    0.798  NA    
14  0.101   0.0221 0.60  valid   50    0.595  NA    
15  0.148   0.0322 0.60  invalid 1     0.854  NA    
16  0.120   0.0261 0.60  valid   1     0.646  NA    
17  0.174   0.0379 0.86  invalid 50    0.783  NA    
18  0.115   0.0251 0.86  valid   50    0.604  NA    
19  0.140   0.0314 0.86  invalid 1     0.830  NA    
20  0.133   0.0291 0.86  valid   1     0.650  NA    
21 NA      NA      NA    NA      NA    0.604   0.587
22 NA      NA      NA    NA      NA    0.783   0.800
23 NA      NA      NA    NA      NA    0.650   0.646
24 NA      NA      NA    NA      NA    0.851   0.859
25 NA      NA      NA    NA      NA    0.595   0.593
26 NA      NA      NA    NA      NA    0.798   0.782
27 NA      NA      NA    NA      NA    0.646   0.652
28 NA      NA      NA    NA      NA    0.854   0.841
29 NA      NA      NA    NA      NA    0.798   0.778
30 NA      NA      NA    NA      NA    0.630   0.654
31 NA      NA      NA    NA      NA    0.835   0.837
32 NA      NA      NA    NA      NA    0.591   0.600
33 NA      NA      NA    NA      NA    0.742   0.761
34 NA      NA      NA    NA      NA    0.667   0.660
35 NA      NA      NA    NA      NA    0.819   0.820
36 NA      NA      NA    NA      NA    0.611   0.606
37 NA      NA      NA    NA      NA    0.734   0.744
38 NA      NA      NA    NA      NA    0.675   0.665
39 NA      NA      NA    NA      NA    0.812   0.804

错误原因

原代码指定了mean和predict两个连接键,但第一个DataFrame根本没有predict列,导致只有当两列同时匹配时才能成功关联(而第一个DF无predict值,所以几乎全为NA);同时full_join会保留两个DF的所有行,因此出现大量冗余的NA行。

正确解决方案

你的需求是按mean列将第二个DF的predict值匹配到第一个DF,应使用left_join,且仅以mean作为连接键:

temp3 <- left_join(e1RTbits, temp2, by = "mean")

补充说明

第二个DF中存在重复的mean值(比如0.798出现两次),直接匹配会导致第一个DF对应行也重复。如果需要每个mean只保留一个predict值,可先对第二个DF去重:

# 按mean去重,保留每个mean对应的第一个predict值
temp2_unique <- temp2 %>% distinct(mean, .keep_all = TRUE)
# 再执行左连接
temp3 <- left_join(e1RTbits, temp2_unique, by = "mean")

内容的提问来源于stack exchange,提问作者Tom_465

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:45:13