Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据一个表中两列之间的依赖关系和R中另一个表中的结果过滤结果?_R_Data.table_Tidyverse - Fatal编程技术网

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

如何根据一个表中两列之间的依赖关系和R中另一个表中的结果过滤结果?,r,data.table,tidyverse,R,Data.table,Tidyverse,我想知道是否有一种方法(一个函数或几行优雅的代码)可以帮助我过滤这个麻烦的数据帧结构/列依赖性的结果 我有一个场景,其中我拥有彼此高度相关的功能(即表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 feature,

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

我有一个场景,其中我拥有彼此高度相关的功能(即表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 
feature, label_correlation_score       
a, 0.20    
b, 0.15    
c, 0.08   
d, 0.04  
e, 0.02   
f, 0.02    
feature, label_correlation_score  
a, 0.20  
c, 0.08  
e, 0.02
表2:

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 
feature, label_correlation_score       
a, 0.20    
b, 0.15    
c, 0.08   
d, 0.04  
e, 0.02   
f, 0.02    
feature, label_correlation_score  
a, 0.20  
c, 0.08  
e, 0.02
我想做的是:
(1)识别每个唯一的
特征1
特征2
对(即a、b和b、a是相同的)。
(2)然后检查表2中针对一对中的每个值的
标签相关性得分
是什么,并且只在每个唯一对之间保留具有最高
标签相关性得分
的特征。
(3)将结果存储在如下所示的新表中:

最终表格:

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 
feature, label_correlation_score       
a, 0.20    
b, 0.15    
c, 0.08   
d, 0.04  
e, 0.02   
f, 0.02    
feature, label_correlation_score  
a, 0.20  
c, 0.08  
e, 0.02
注意:可以在最后一行选择e或f,因为它们的
label\u correlation\u得分相同

提前谢谢


Edit:我还对使用
data.table的等效代码感兴趣

如果您对使用
tidyverse
没意见,这里有一种方法

  • 首先,我们只保留
    feature1
    小于
    feature2
    的行,从而删除重复项(假设两个版本始终可用)
  • 然后,我们为
    feature1
    feature2
    加入
    label\u correlation\u score
    (分别给出列后缀
    \u 1
    \u 2
  • 然后,我们将最大分数存储在
    label\u correlation\u score
    列中,并将与之对应的特征存储在
    feature
    列中
  • 最后,我们只保留
    特征
    标签(label\u correlation\u score)
库(tidyverse)
df1%
左连接(df2,by=c(“特征1”=“特征”))%>%
左联接(df2,by=c(“特征2”=“特征”),后缀=c(“特征1”,“特征2”)))%>%
变异(标签相关性得分=pmax(标签相关性得分1,标签相关性得分2),
特征=如果其他(标签相关性得分1>标签相关性得分2,特征1,特征2))%>%
选择(特征、标签、相关性、分数)

# A tibble: 3 x 2
  feature label_correlation_score
  <chr>                     <dbl>
1 a                          0.2 
2 c                          0.08
3 f                          0.02
#一个tible:3 x 2
特征标签\相关性\分数
1 a 0.2
2 c 0.08
3楼0.02

非常感谢您!工作很愉快。行
filter(feature1%
非常漂亮(在我的工作流程中我不会这么想,因为我的功能标签太长了,而且大多数都共享前缀)。我也不知道
base::pmax()
的存在及其用例。