-2
我正在查看數據向量是否處於排名形式。那是;每個觀測值都是1和N之間的數字,其中N是觀測值的數量,但是是隨機的,未知的次序。如何檢查一個向量是否包含從1到N的無序數字序列
我能想到的最簡單的檢查是高斯和,使用(N *(N + 1))/ 2並將其與矢量和相比較。除了我的情況,我有200,000個觀測值,所有從1到200,000的數字之和大於2^32。除了獲得一臺64位計算機之外,檢查數據排名的最快方法是什麼。
我正在查看數據向量是否處於排名形式。那是;每個觀測值都是1和N之間的數字,其中N是觀測值的數量,但是是隨機的,未知的次序。如何檢查一個向量是否包含從1到N的無序數字序列
我能想到的最簡單的檢查是高斯和,使用(N *(N + 1))/ 2並將其與矢量和相比較。除了我的情況,我有200,000個觀測值,所有從1到200,000的數字之和大於2^32。除了獲得一臺64位計算機之外,檢查數據排名的最快方法是什麼。
checkForRanks <- setdiff(1:N,X)
isRanked <- length(checkForRanks) > 0
if(!isRanked) stop("Please rank data")
如果您有兩個值的差異可以互相抵消,則您的高斯總和檢查將返回誤報,例如,它將返回1,1,1,3,5,5,6(其中2減1並且4增加1)並且N = 6。 – 2015-03-03 09:59:19
unique,is.integer – Khashaa 2015-03-03 10:02:25
作爲之前刪除的註釋,注意到setdiff( 1:N,vector)似乎工作。雖然我不確定如何處理返回類型的整數(0)。 @FrankSchmitt它可能會返回一個誤報,但數據不太可能以接近隊列的形式出現。它將被排名或沒有。 – 2015-03-03 10:02:45