假设我在R
中有一个 Dataframe ,其中有两个变量,我称之为A
和B
。我想检查这两个变量是否在一对一的Map中)。例如,考虑以下 Dataframe :
DF <- data.frame(A = c(0,2,0,1,2,1,0,1,1,1),
B = c('H','M','H','W','M','W','H','W','W','W'));
DF;
A B
1 0 H
2 2 M
3 0 H
4 1 W
5 2 M
6 1 W
7 0 H
8 1 W
9 1 W
10 1 W
在这个 Dataframe 中,我们可以通过检查看到,A
和B
之间存在一一对应关系(0 = H
、1 = W
和2 = M
)。我想找到一种方法,使用适当的R
代码来处理更大的 Dataframe ,而不需要检查每个元素。代码应该产生一个简单明了的语句说明指定变量之间是否存在一对一的关系;简单的TRUE
/FALSE
输出应该是理想的。
7条答案
按热度按时间xsuvu9jc1#
如果我们想检查'A','B'是否有重复项,使用
duplicated
frombase R
如果我们需要一个
TRUE/FALSE
,则使用all
Package可以封装成函数
llew8vvj2#
下面是使用
table
函数的一个相对简单的方法从这里你可以看到所有的
0
从A
对应于B
中的H
等等。要将其 Package 在正式检查中,可以检查列总和是否匹配列max:
vcirk6k63#
我正在寻找一个类似的功能,也找不到一个。这是我的想法它返回一个包含任何不匹配的表。
使用您的数据:
在您的数据中引入了一个不匹配:
qyswt5oh4#
tidyverse
:gg58donl5#
我们可以用
ave
编写一个函数,它将检查每个组(B
)只存在一个唯一的A
值,从而确保一对一的Map。现在,我们改变一个元素来检查
pu3pd22g6#
我想知道是否有一个单独的项目的一对一Map。在你的例子中,我发现了一个小错误,所以谢谢你的提问。
基本思想是创建一个表(x,y)并检查它是否可以是对角的。显然,如果变量的布局“就是这样”,那么表格将是对角线的,很容易辨别,但在您的情况下,对齐方式有点参差不齐:
对我来说,纠正这一点的策略是沿着这些路线
然后计算行和列的总和。
如果行和或列和大于1,则这不是一对一关系。如果行和或列和都不超过1,则Map为一对一。我最初的错误是没有检查两个方向上Map的唯一性。我知道我可以计算特征值来找出同样的东西,但这不是那么明显,在初步测试中慢得多。
这是我的功能。传入2列或一个包含2列的矩阵,返回TRUE或FALSE
使用您的数据:
这对于只有几千行的小问题很有效。
在我的实际应用程序中,列的长度是10000行,我最终将它们分成几个部分,只要一个部分没有通过测试,我就返回一个false。
hs1rzwqc7#
使用
utilities
包中的mappings
函数您可以使用
R
中utilities
package中的mappings
函数检查数据框中变量之间的函数Map。这个函数接受一个输入数据框,并检查变量之间是否存在Map。默认情况下,该函数仅检查因子变量,但您可以通过设置all.vars = TRUE
检查数据中的所有变量。(铭记非因素变量之间的Map应谨慎解释;连续变量几乎总是一对一Map,因为它们没有重复的值。)下面是一个包含五个因子变量的模拟数据集的示例,它们之间有许多Map。我们可以使用下面的
R
代码检查Map。如您所见,函数的输出显示了因子之间的所有函数关系,还告诉您哪些因子是“冗余”的(即,其他因子的函数)。默认情况下,输出包括显示因子之间Map的DAG图。从输出和图中可以看出, Dataframe 中唯一的非冗余因子是
VAR3
;所有其他因子变量都是该变量的函数。(这也可以通过查看数据框中的值来确认。)