0
我想檢查兩個變量是否有一對一的關係。兩個變量之一包含地址字符,而另一個包含地址的ID。我想看看它是否是一對一的對應關係。 我正在考慮將字符轉換爲ASCII碼或使用數學函數爲它們分配一個值。但是我想知道是否還有其他更簡單,更有效的方法。檢查r中對應關係的最佳方法是什麼
我想檢查兩個變量是否有一對一的關係。兩個變量之一包含地址字符,而另一個包含地址的ID。我想看看它是否是一對一的對應關係。 我正在考慮將字符轉換爲ASCII碼或使用數學函數爲它們分配一個值。但是我想知道是否還有其他更簡單,更有效的方法。檢查r中對應關係的最佳方法是什麼
您可以使用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
你好,歡迎來到SO。爲了提供一個可重現的例子,你可以使用'reproduce()'。說明在這裏:http://bit.ly/SORepro –