2015-10-26 1 views
0

У меня есть набор данных с двумя столбцами (символ) - текст, источник, я хочу создать набор данных таким образом, что если конкретное значение в текстовом столбце присутствует менее 5 раз. Я использую ниже код, но он дает только первое вхождение, вместо этого мне нужны все наблюдения, которые удовлетворяют этому условию. Например: «iphone» присутствует в тексте 4 раза, поэтому мне нужны все 4 наблюдения и их соответствующий источник, но для этого я получаю только одно наблюдение.Проблема с группой по выражению в sqldf

test = sqldf('select * , count(*) as count from base group by text having count < 5') 

Я знаком с proc sql в SAS и я недавно начал изучать Р. Ли sqldf работает по-другому?

ответ

0

Запрос в вопросе работает в соответствии со стандартными правилами SQL и будет работать таким образом в любой системе, поддерживающей SQL.

Кажется, что вы действительно хотите:

library(sqldf) 
base <- data.frame(text = rep(letters[1:3], 4:6), record = 1:15) # test input 

sqldf('select * 
     from (select text, count(*) as count 
      from base 
      group by text 
      having count < 5) 
     join base using(text)') 

, который для тестового входа дает:

text count record 
1 a  4  1 
2 a  4  2 
3 a  4  3 
4 a  4  4 

(В будущем, пожалуйста, обеспечить полную уверенность, содержащийся код, включая все входы, которые читатели могут работать в воспроизведите проблему.)

+0

Спасибо большое! Может быть, sas sql ведет себя по-другому, сначала я должен изучить стандартные SQL-правила. Я получил вашу точку зрения, я буду предоставлять код, содержащийся в ящике, в следующий раз. –

0
# Let me assume a data frame 
base <- data.frame(source = 1:100, text = sample(letters,replace=T,100))  
base2 <- merge(base, aggregate(base$text, by=list(base$text), length), by.x="text", by.y="Group.1") 
your_output <- base2[base2$x<5, ] 

Я использовал слияния и агрегат вместо sqldf.

Использование sqldf:

sqldf("select * from base where text in (select text from base group by text having count(*) < 5)") 
+0

Thanks Kartheek! –

0

Этот запрос дает этот «текст», для которого отсчет наблюдений меньше, чем 5. Вы должны написать еще один запрос, который выбирает все атрибуты из набора основных данных со всем этим «текстом», присутствующим в тесте. Надеюсь это поможет.

+0

Спасибо тонне Нирвик! –

 Смежные вопросы

  • Нет связанных вопросов^_^