2016-06-08 3 views
0

У меня проблема, на которой я нашел решение, но хотел бы понять, что происходило в исходной кодировке.R выбор строки, обеспечивающий частичные результаты

Итак, я начал с таблицы, извлеченной из базы данных SQL, и хотел получить информацию для 1 клиента, который покрыт двумя номерами клиентов.

Первоначально я запускал это, чтобы выбрать эти номера счетов.

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) 
} 

Кроме того, долгое время Lurker, первый раз плакат так, дайте мне знать, если я сделал что-то неправильно в этом вопросе.

+0

Является ли каждый элемент GTC $ AccountNumber один номер счета, или это вектор длина которого иногда больше 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 
Смежные вопросы