2016-06-08 96 views
0

我有一個問題,我找到了一個解決方案,但想了解原始編碼中發生了什麼。R行選擇提供部分結果

因此,我從一個從SQL數據庫中提取的表格開始,希望得到1個客戶端的信息,該客戶端由2個客戶端編號覆蓋。

最初我運行這個來選擇這些帳號。

match <- c("C524",'5568') 
gtc <- gtc[gtc$AccountNumber == match,] 

然而,這只是返回預期的效果的一半,返回的結果在不同的時間不同(這是運行的每週報告),並根據運行它的計算機上。

現在,我已經建立了一個循環,它可以正常工作並提取所有結果,但是真的想知道原始查詢會發生什麼。

match <- c("C524",'5568') 
for (each in match) { 
    gtcLoop<- gtc[gtc$AccountNumber == each,] 
    result<-rbind(result,gtcLoop) 
} 

而且,長時間的潛伏者,第一次海報,所以讓我知道,如果我做錯了什麼在這個問題上。

+0

是賬戶號碼單帳號GTC $的每個條目或者是它的向量其長度有時大於1? – lmo

+0

每個條目是一個單一的號碼 – PrinceOfToe

回答

2

您需要通過%in%更換==

gtc <- data.frame(AccountNumber = sample(c(match, "something"), 10, replace = TRUE)) 

gtc[gtc$AccountNumber %in% match,] 
+0

謝謝,這是有效的。任何想法爲什麼'=='的作品,但只爲一些結果? – PrinceOfToe

0

只是標記到Qaswed的答案(+1),你需要明白髮生了什麼,當你計算矢量比較喜歡==。請參閱:

?`==` 

?`%in%` 

然後嘗試像1 == c(1,2)1 %in% c(1,2)

你得到一半的結果的原因是因爲該行子集是隻能使用一次評估,如:

df <- data.frame(id=c(1:5), acct_cd = letters[1:5]) 
df[df$acct_cd == c("a","c"),] # this is wrong, for demo only 
df[df$acct_cd %in% c("a","c"),] # this is correct