我有一个很大的 Dataframe ,我使用combn来获得每对变量之间的唯一组合。因此输出如下(只有7个变量的小例子)。我的问题是,我希望确定哪些特征的相关性超过50%超过0.5;然而,combn的输出具有在两列中出现的变量。例如,从下面的Var 2总共出现5次(Variable_list1中出现4次,Variable_list2中出现一次),但是Var 1在Variable_list1中出现7次。
structure(list(Variable_list1 = c("Var1", "Var1", "Var1", "Var1",
"Var1", "Var1", "Var1", "Var2", "Var2", "Var2", "Var2", "Var3",
"Var3", "Var3", "Var3", "Var3", "Var4", "Var4", "Var4", "Var4",
"Var5", "Var5", "Var5", "Var6", "Var6", "Var7"), Variable_list2 = c("Var2",
"Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var4", "Var5",
"Var6", "Var7", "Var4", "Var5", "Var6", "Var7", "Var8", "Var5",
"Var6", "Var7", "Var8", "Var6", "Var7", "Var8", "Var7", "Var8",
"Var8"), Coefficient = c("0.771428571428571", "0.839285714285714",
"0.839285714285714", "0.807142857142857", "0.775", "0.807142857142857",
"0.739285714285714", "0.964285714285714", "0.982142857142857",
"0.935714285714286", "0.953571428571429", "0.925", "0.946428571428571",
"0.957142857142857", "0.975", "0.921428571428571", "0.985714285714286",
"0.921428571428571", "0.935714285714286", "0.964285714285714",
"0.932142857142857", "0.957142857142857", "0.978571428571428",
"0.982142857142857", "0.95", "0.960714285714286")), row.names = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 9L, 10L, 11L, 12L, 14L, 15L, 16L, 17L,
18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L), class = "data.frame")
我不知道如何处理这个问题(我知道你可以使用排列来获得完整的组合列表,其中该特征在Variable_list1中以相同的数字出现,但我无论如何都会删除一些行,因此无论该特征在列表1和2中以不同的数字出现)。
我会用table(data$Variable_list1)和表(data$Variable_list2)并查看每个特征出现的次数,考虑每个列唯一的变量以及变量在两者中出现的位置。但是,我如何将此作为新列引入到上面的结果数据框架中,然后计算哪些特征在其相关性超过50%时超过相关系数阈值,其中每个特征具有不同数量的总相关性?
任何建议将不胜感激。
EDIT:一种潜在的(低效的)方法。
1.将超过阈值的相关性分段出来,2)对变量在两列变量中出现的次数进行计数并保存,3)将其与这些特征具有的总相关性的数量合并并获得百分比,4)保持特征〉50%
1条答案
按热度按时间hc2pp10m1#
您可以创建一个唯一的
vars
字符向量,然后在该向量上使用lapply()
(即对于vars
中的每个v
,返回一个布尔值,指示Variable_list1
或Variable_list2
列中具有v
的行的集合是否具有满足您的标准的系数数量:输出:
(In在这种情况下,所有变量都满足您的条件,因此它们都将返回)
另一种设置方法是通过一个helper函数,该函数返回一个包含所需信息的单行数据框,给出df和变量名;然后使用
bind_rows()
将vars
的每个值上的结果绑定在一起:输出: