table
을 사용할 수 있으며 결과 행렬에 각 행과 각 열에 정확하게 1 이 하나씩 있는지 확인할 수 있습니다. 그것은 또한 중복이 어디에 있는지 알려줍니다.
d <- data.frame(
x = sample(LETTERS, 10, replace=TRUE),
y = sample(LETTERS, 10, replace=TRUE)
)
m <- table(d) != 0
all(rowSums(m) == 1) && all(colSums(m) == 1)
그러나 많은 양의 데이터가있는 경우 매우 효율적이지 않습니다. 대신 희소 행렬을 사용할 수 있습니다.
library(Matrix)
m <- sparseMatrix(
i = as.numeric(as.factor(d$x)),
j = as.numeric(as.factor(d$y)),
x = rep(1, nrow(d))
)
m <- m > 0
all(rowSums(m) == 1) && all(colSums(m) == 1)
sqldf
도 사용할 수 있습니다.
library(sqldf)
sqldf("SELECT x, COUNT(DISTINCT y) AS n FROM d GROUP BY x HAVING n > 1")
sqldf("SELECT y, COUNT(DISTINCT x) AS n FROM d GROUP BY y HAVING n > 1")
또한 단순히 당신이 얼마나 많은 다른 쌍 셀 수 : 그것은 x
및 y
의의 고유 값의 수와 동일해야합니다.
nrow(unique(d)) == length(unique(d$x)) && nrow(unique(d)) == length(unique(d$y))
데이터의 * 최소 * 샘플을 제공 할 수 있습니까? 지금이 순간 무슨 뜻인지는 분명하지 않습니다. [훌륭한 재현 가능한 예제 만들기] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – thelatemail
안녕하세요, 오신 것을 환영합니다. 재현 가능한 예제를 만들기 위해'reproduce () '를 사용할 수 있습니다. 지침은 여기에 있습니다 : http://bit.ly/SORepro –