R行选择提供部分结果

时间:2016-06-08 12:36:34

标签: r

我遇到了一个问题,我找到了解决方案,但想了解原始编码中发生了什么。

所以我开始从一个SQL数据库中提取一个表,并希望获得1个客户的信息,该客户端有2个客户编号。

最初我运行此选择这些帐号。

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

然而,这只返回了大约一半的预期结果,并且返回的结果在不同的时间变化(这是作为每周报告运行),并且取决于运行它的PC。

现在,我已经设置了一个可以正常工作的循环并提取所有结果,但我真的想知道原始查询的内容。

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

此外,长时间潜伏,第一次海报,所以让我知道我是否在这个问题上做错了。

2 个答案:

答案 0 :(得分:2)

您需要将==替换为%in%

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

gtc[gtc$AccountNumber %in% match,]

答案 1 :(得分: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