2015-08-21 5 views
1

Я исследовал сайт, но нашел ответы, которые не отвечают на вопрос на 100%. У меня есть data_frame из 258 наблюдений для 50 переменных (дискретизированных здесь):Подмножество данных на основе условий

pdis_reel distance corde date_course spe ssp code_hippo libel_hippo 
3000 3000 G 25/03/15 T A 1303 Marseille-Borély 
2625 2625 D 18/03/15 T A 4701 Agen 
2950 2925 G 17/02/15 T A 601 Cagnes-sur-Mer 
2675 2650 G 19/01/15 T A 1302 Marseille-Vivaux 
2650 2650 G 29/11/14 T A 1302 Marseille-Vivaux 
3250 3225 D 09/11/14 T A 4203 Saint-Galmier 
3025 3000 G 29/10/14 T A 1303 Marseille-Borély 
2625 2600 D 04/10/14 T A 303 Moulins 
2875 2850 G 28/09/14 T A 6901 Lyon-Parilly 
2600 2600 D 10/09/14 T A 8404 Cavaillon 
4175 4150 D 06/09/14 T A 7513 Vichy 
2675 2675 G 17/08/14 T A 102 Divonne-les-Bains 
2700 2700 D 03/08/14 T A 7301 Aix-les-Bains 
2875 2850 G 04/07/14 T A 4201 Feurs 
2300 2300 G 21/05/14 T A 1303 Marseille-Borély 
2650 2650 D 03/05/14 T A 8301 Hyères 
2650 2650 D 27/04/14 T A 401 Oraison 
2850 2850 G 22/04/14 T A 6901 Lyon-Parilly 

Я хотел бы, чтобы извлечь все строки, близкие условия совпадения, такие как:

centpoourcent<- subset(data_frame, corde=="D" & pdis_reel==2900+-200) 

, когда я смотрю на centpourcent это имеет 258 строк и 0 столбцов, почему?

Кроме того, я не понимаю, почему именно не рекомендуется использовать subset() в сценарии или программе.

+3

Является ли ваше состояние означает, что 'Корд == "D" и pdis_reel> 2700 & pdis_reel <3100 '? –

+0

правильно, но я все еще получаю «фрейм данных с 0 столбцами и 258 строками» для centpourcent ... – Zen4ttitude

+0

Тогда никакая строка в ваших данных не соответствует этому условию. Так просто. Если вы не ищете статусу * OR *, например 'subset (data_frame, corde ==" D "| (pdis_reel> 2700 & pdis_reel <3100))' может быть? –

ответ

1

(согласно запросу) Я попытаюсь немного объяснить, что с неправильным кодом.

Когда делать что-то вроде 2900 + -200, вы в основном говорить R

  1. Возьмите число от LHS
  2. Добавьте его в минус числа на РИТ числа

Иными словами: 2900 - 200 = 2700. Это не способ указать диапазоны в R

Рассмотрим следующий пример данных

set.seed(123) 
test <- sample(150, 20, replace = TRUE) 

Допустим, наше условие тест == 60 + -20

Мы можем сделать либо

test[test >= 40 & test <= 80] 
## [1] 44 62 80 69 69 50 

Или

between <- function(x, upper, lower) x[x >= upper & x <= lower] 
between(test, 40, 80) 
## [1] 44 62 80 69 69 50 

Или

'%between%' <- function(x, y) x[x >= y[1] & x <= y[2]] 
test %between% c(40, 80) 
## [1] 44 62 80 69 69 50 

Или просто загрузите пакет dplyr или data.table, которые имеют те же функции

+0

Спасибо, Дэвид, мне нравятся версии функций лучше, поскольку они кажутся более гибкими в использовании. Я постараюсь выполнить прогон в ближайшие дни. Я хочу взять самую новую дату моего набора записей (max()), вычесть из него 45 дней (-45) и отфильтровать мой кадр данных, сохраняя только строки в этом диапазоне. – Zen4ttitude

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