如何根据一个表中两列之间的依赖关系和R中另一个表中的结果过滤结果?
我想知道是否有一种方法(一个函数或几行优雅的代码)可以帮助我过滤这个麻烦的数据帧结构/列依赖性的结果 我有一个场景,其中我拥有彼此高度相关的功能(即表1)。如何根据一个表中两列之间的依赖关系和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,
我还有一个单独的表格,列出了每个特征的另一个分数(即表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()
的存在及其用例。