繁体   English   中英

如何根据 R 中一个表中的两列之间的依赖关系和另一个表的结果过滤结果?

[英]How to filter results based on dependencies between two columns in one table and results from another table in R?

我想知道是否有一种方法(function 或几行优雅的代码)可以帮助我过滤具有这种麻烦的数据帧结构/列依赖性的结果。

我有一个场景,我的特征彼此高度相关(即表 1)。
我还有一个单独的表,列出了每个单独功能的另一个分数(即表 2)。

表格1:

feature1, feature2, feature_correlation_score  
a, b, 0.7      
c, d, 0.5  
b, a, 0.7   
d, c, 0.5     
e, f, 0.8,  
f, e, 0.8 

表 2:

feature, label_correlation_score       
a, 0.20    
b, 0.15    
c, 0.08   
d, 0.04  
e, 0.02   
f, 0.02    

我想做的是:
(1)识别每个唯一的feature1feature2对(即a、b 和b、a 相同)。
(2)然后检查表 2 中对于一对中的每个值的label_correlation_score是多少,并且只保留每个唯一对之间具有最高label_correlation_score的特征。
(3)将结果存储在一个新表中,如下所示:

决赛桌:

feature, label_correlation_score  
a, 0.20  
c, 0.08  
e, 0.02

注意:它可以是在最后一行中选择的 e 或 f,因为它们的label_correlation_scores是相同的。

提前致谢!

编辑:我也对使用data.table的等效代码感兴趣。

如果您可以使用tidyverse ,这是一种方法。

  • 首先,我们只保留feature1小于feature2的行,从而删除重复项(假设两个版本始终可用)。
  • 然后,我们为feature1feature2 label_correlation_score分别给列后缀_1_2 )。
  • 然后,我们将最大的分数存储在label_correlation_score列中,并将与之对应的特征存储在feature列中。
  • 最后,我们只保留featurelabel_correlation_score列。
library(tidyverse)

df1 <- read_csv("feature1, feature2, feature_correlation_score
a, b, 0.7
c, d, 0.5
b, a, 0.7
d, c, 0.5
e, f, 0.8,
f, e, 0.8")

df2 <- read_csv("feature, label_correlation_score
a, 0.20
b, 0.15
c, 0.08
d, 0.04
e, 0.02
f, 0.02 ")

df1 %>% 
  filter(feature1 < feature2) %>% 
  left_join(df2, by = c("feature1" = "feature")) %>% 
  left_join(df2, by = c("feature2" = "feature"), suffix = c("_1", "_2")) %>% 
  mutate(label_correlation_score = pmax(label_correlation_score_1, label_correlation_score_2),
         feature = if_else(label_correlation_score_1 > label_correlation_score_2, feature1, feature2)) %>% 
  select(feature, label_correlation_score)

这使

# A tibble: 3 x 2
  feature label_correlation_score
  <chr>                     <dbl>
1 a                          0.2 
2 c                          0.08
3 f                          0.02

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM