gpt4 book ai didi

r - 如何删除两列中以相反顺序包含相同对的行

转载 作者:行者123 更新时间:2023-12-04 11:03:40 25 4
gpt4 key购买 nike

在相关矩阵中,我想删除基本上包含与另一行相同信息的行,除了
var1 和 var2 列中的“A”和“B”分别包含“B”和“A”

   var1 var2      value
1 cyl mpg -0.8521620
2 disp mpg -0.8475514
3 wt mpg -0.8676594
4 mpg cyl -0.8521620
5 disp cyl 0.9020329
6 hp cyl 0.8324475
7 vs cyl -0.8108118
8 mpg disp -0.8475514
9 cyl disp 0.9020329
10 wt disp 0.8879799
11 cyl hp 0.8324475
12 mpg wt -0.8676594
13 disp wt 0.8879799
14 cyl vs -0.8108118

在这里,我们可以使用 mpg vs cyl 删除第 4 行,因为我们已经在第 1 行有了 cyl vs mpg

我知道我可以过滤列值中的唯一值,但我不想这样做,因为我的庞大数据集实际上有机会获得与多对列相同的相关分数。所以必须通过名称匹配 col var1 来完成和 var2
到目前为止,我有这段代码可以过滤掉高于某个相关值但不是 1(变量与本身)的数据行
mtcars %>% 
as.matrix %>%
cor %>%
as.data.frame %>%
rownames_to_column(var = 'var1') %>%
gather(var2, value, -var1) %>%
filter(value > 0.8 | value < -0.8) %>%
filter(value != 1)

编辑

安德烈的回答
cor %>% {(function(x){x[upper.tri(x)]<-NA; x})(.)} %>%

更快,但 Rui 的答案更通用,可以应用于除 cor 矩阵计算之外的其他情况。
Unit: milliseconds
expr min lq mean median uq max neval cld
Andre 4.818793 5.113676 5.630160 5.408955 5.704825 22.33730 100 a
Rui 5.413692 5.761669 7.531146 6.003656 6.583750 78.02836 100 b

最佳答案

代码:

mtcars %>% 
as.matrix %>%
cor %>% {(function(x){x[upper.tri(x)]<-NA; x})(.)} %>%
as.data.frame %>%
rownames_to_column(var = 'var1') %>%
gather(var2, value, -var1) %>%
filter(value > 0.8 | value < -0.8) %>%
filter(value != 1)

结果:
#  var1 var2      value
#1 cyl mpg -0.8521620
#2 disp mpg -0.8475514
#3 wt mpg -0.8676594
#4 disp cyl 0.9020329
#5 hp cyl 0.8324475
#6 vs cyl -0.8108118
#7 wt disp 0.8879799

使用的技巧:
  • 使用匿名函数 READ MORE
  • 包装{围绕匿名函数来防止默认管道行为(管道到第一个可能的位置),如果没有这一步似乎可以工作,但我觉得这样做更安全。 READ MORE
  • 删除所有重复值( ?upper.tri )(您甚至可以在该步骤中删除对角线,以删除最后一个代码片段 filter(value != 1) )


  • 我的建议:
    mtcars %>% 
    as.matrix %>%
    cor %>% {(function(x){x[upper.tri(x, diag = T)]<-NA; x})(.)} %>%
    as.data.frame %>%
    rownames_to_column(var = 'var1') %>%
    gather(var2, value, -var1) %>%
    filter(value > 0.8 | value < -0.8)

    关于r - 如何删除两列中以相反顺序包含相同对的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52949800/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com