2013-05-26 44 views
0

我希望能夠搜索或過濾列,並且如果它滿足某些參數,則在另一列(但在不同的點)返回值。如果單獨列中的值滿足某些參數,則從列中返回值

因此,例如,
L <- matrix(rnorm(500, mean=50, sd=4), nrow=100, ncol=5, byrow=FALSE)
L <-as.data.frame(L)
colnames(L)<-c("1","2","3","4","5")

如果L[,"1"] >= 58我想打印在L[,"4"]是5行低價值的價值。

因此,如果L[1,1]的值爲60,我需要L[6,4]的值,併爲L[,"1"]中滿足這些參數的所有值執行此操作。優選地具有給出多個配對值(即對應座標)的清楚指示的打印輸出。

幫助開始這將不勝感激,顯然解決方案也很有幫助。我知道如何過濾和製作由特定值組成的數據框的子集,但我不知道如何在像這個問題那樣的不同部分拉對象。

+1

當你到達數據框的底部(因此下面5行沒有行)時,你想要什麼? – Thomas

+0

返回'NA'就足夠了。 –

回答

1

那麼,至於幫助入門,which函數將有所幫助。它返回符合特定標準的指標 - 所以看到所有行的這列「1」超過58時,你可以使用:

matched.indices <- which(L[,"1"] > 58)

然後,爲了找出所有5行較低的指數我們可以簡單地添加5:

shifted.indices <- matched.indices + 5

從這裏,你可以打印出的對數值和協調,但是你想。一種方法是如下:

len <- length(matched.indices)  
cat(paste(rep("[",len), matched.indices, rep(",1],", len),  # 1st coordinate 
     rep("[",len), shifted.indices, rep(",4] = ", len),  # 2nd coordinate 
     L[matched.indices, "1"],        # 1st value 
     rep(",", len), 
     L[shifted.indices, "4"],        # 2nd value 
     sep=""),sep="\n") 

輸出將是這樣的:

[4,1],[9,4] = 58.9223792285318,48.5241852967192 
[70,1],[75,4] = 58.5015984791419,55.3071097158975 
[76,1],[81,4] = 61.7996739529131,51.6725968541657 
[85,1],[90,4] = 58.0881601753751,40.2410431328713 
[92,1],[97,4] = 58.1622310810397,50.6118549434608 
[96,1],[101,4] = 58.4433975051732,NA 

就像我說的,這只是一個開始。具體來說,你沒有提到最後5行應該怎麼做;我的解決方案將只爲這些值打印NA(與上面最後一行一樣)。如果你想澄清這一點,我會相應地更新答案。

+0

這非常有幫助,謝謝。是的,我主要是想開始,因爲我是新人,不知道從哪裏開始。謝謝。 –

相關問題