2017-01-11 9 views
0

Я пытаюсь подмножить DataFrame с использованием логических операторов в день года, и мне интересно, почему следующее не работает.Подмножество dataframe с использованием логических элементов в R

num <- c(11,22,33,44) 
day.of.yr <- c(31,32,33,34) 

dframe <- data.frame(num,day.of.yr) 

    num day.of.yr 
1 11  31 
2 22  32 
3 33  33 
4 44  34 

target.days <- c(32,34) 

# works 
test1 <-dframe[(day.of.yr==target.days[1] | day.of.yr==target.days[2]),] 

    num day.of.yr 
2 22  32 
4 44  34 

# doesn't work 
test2 <- dframe[day.of.yr==target.days,] 

    num day.of.yr 
4 44  34 

Когда я пытаюсь его на реальных данных, R также выводит только часть того, что я хочу его для вывода, с таким предупреждением:

Warning message: 
In dframe$day.of.yr == target.days : 
longer object length is not a multiple of shorter object length 

Было бы неплохо иметь короткий -cut способ указания нескольких строк фрейма данных на основе значений в одном столбце. Я пробовал несколько разных способов, но пока не повезло.

ответ

1

Использование %in%, например, так:

subset(dframe, day.of.yr %in% target.days) 
+0

Спасибо за это. Мне нравится избегать использования подмножества(), если я могу, однако, из-за предупреждения в файле справки: «Это удобная функция ... Для программирования лучше использовать стандартные функции подмножества, такие как [, ... « – ginko

+0

Конечно, перевод« dframe [dframe $ day.of.yr% in% dframe $ target.days,] '. – lmo

+0

На самом деле это работает вместо: 'dframe [dframe $ day.of.yr% in% target.days,]' – ginko

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

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