2017-06-20 106 views
3

我有一個充滿數字的大數據框和第二個數據框,每列有限制(高和低可接受範圍)。我想知道如何使用上限和下限來查找每個列不在該範圍之外的數據。我可以用for循環來做到這一點,但這是一個混亂的解決方案(我肯定沒有效率),所以我想知道是否有另一種方法。R使用限制來查找數據幀中的數據

例如

#Create a data frame with values ranging from 0-10 
sampleData <- data.frame(replicate(9,sample(0:10,10, rep=TRUE))) 

    X1 X2 X3 X4 X5 X6 X7 X8 X9 
1 1 7 9 0 7 3 0 0 8 
2 4 8 3 4 9 6 3 2 3 
3 9 7 5 2 7 5 10 9 4 
4 2 6 2 1 3 9 4 3 9 
5 10 2 2 6 4 7 4 9 7 

#Have another data frame with our limits 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 
1 1 7 3 4 7 3 0 0 3 
2 4 8 9 10 9 6 3 2 8 

我想知道哪些行已根據是我們該列限制之外的值失敗。所以失敗將是

Col 1: 3,5 
Col 2: 4,5 
Col 3: 4,5 
Col 4: 1,3,4 
Col 5: 4,5 
Col 6: 4,5 
Col 7: 3,4,5 
Col 8: 3,4,5 
Col 9: 4 

謝謝!

回答

2

我們可以使用base R mapply。假設您的限制數據框被稱爲limits。我們從兩個數據框中並行傳遞列,並選擇擴展限制的索引。

mapply(function(x, y) which(x < y[1] | x > y[2]) , sampleData, limits) 


#$X1 
#[1] 3 5 

#$X2 
#[1] 4 5 

#$X3 
#[1] 4 5 

#$X4 
#[1] 1 3 4 

#$X5 
#[1] 4 5 

#$X6 
#[1] 4 5 

#$X7 
#[1] 3 4 5 

#$X8 
#[1] 3 4 5 

#$X9 
#[1] 4 
+0

47秒,該死:)我會刪除我的,因爲它是完全一樣的。 – LAP

+0

@LeoP。 oops..Happens :) –

+0

耶!再見了!感謝你的迴應和幫助完美后,我意識到限制是一個矩陣,而不是數據幀:(。 – Dippy