是否有任何现有的R功能来检查两列是否具有一对一的关系(不管列类型如何)。
预期产出实例:
A B C
0 'a' 'apple'
1 'b' 'banana'
2 'c' 'apple'A&B是一对一吗?真的
A&C是一对一吗?错误
B&C是一对一吗?错误
发布于 2022-09-28 13:46:48
如果将一个向量传递给自己,它将返回一个整数向量,给出第一个索引,每个唯一值发生在。我们可以直接比较这些整数向量:
is_one_to_one = function(x, y) {
xu = match(x, x)
yu = match(y, y)
identical(xy, yu)
}然后,您可以将其应用于每一对列。
将其封装在一个函数中:
cor_1to1 = function(df) {
mat = vapply(df, \(x) match(x, x), FUN.VALUE = integer(nrow(df)))
nm = combn(colnames(mat), m = 2, FUN = paste, collapse = " :: ")
val = combn(colnames(mat), m = 2, FUN = function(i) {
identical(mat[, i[1]], mat[, i[2]])
}, simplify = TRUE)
setNames(val, nm)
}
# A :: B A :: C B :: C
# TRUE FALSE FALSE 发布于 2022-09-28 14:02:02
你可以:
one_to_one <- function(data){
data[] <- sapply(data, \(x) match(x, x))
pairs <- t(combn(seq_len(ncol(data)), 2))
cbind(t(matrix(colnames(data)[t(pairs)], nrow = 2)),
One2One = apply(pairs, 1, function(x) all(Reduce(`==`, data[, x])))) |>
as.data.frame()
}测试
one_to_one(df)
# V1 V2 One2One
#1 A B TRUE
#2 A C FALSE
#3 B C FALSEhttps://stackoverflow.com/questions/73882469
复制相似问题