2016-06-08 94 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