Удалите верхнюю и нижнюю целые строки, если значение меньше -50

#r #dplyr #filtering

Вопрос:

У меня есть следующий набор данных:

Прибыль MRO 15×5 D30
$150.00 -9.189 -0.24
$12.50 -6.076 -0.248
-$125.00 -7.699 -0.282
-$162.50 -8.008 -0.281
-$175.00 -0.183 -0.056
-$175.00 -0.235 -0.061
$275.00 0.141 -0.027
-$175.00 -4.062 -0.103
-$162.50 -5.654 -0.258
-$162.50 -1.578 -0.051
-$175.00 -3.336 -0.205
-$162.50 -1.523 -0.022
$412.50 -1.524 -0.194
$337.50 -1.049 -0.055
$100.00 -1.043 -0.059

Я хочу сначала расположить столбец D30 в порядке возрастания, а затем посмотреть столбец Прибыли. Если значения верхней n строки и нижней n строки (диапазон ячеек) в столбце Прибыль меньше -50, удалите всю строку в наборе данных.

Результат был бы таким:

Прибыль MRO 15×5 D30
$275.00 0.141 -0.027
-$162.50 -1.578 -0.051
$337.50 -1.049 -0.055
-$175.00 -0.183 -0.056
$100.00 -1.043 -0.059
-$175.00 -0.235 -0.061
-$175.00 -4.062 -0.103
$412.50 -1.524 -0.194
-$175.00 -3.336 -0.205
$150.00 -9.189 -0.24
$12.50 -6.076 -0.248

Этот вывод является результатом удаления верхней 1-й строки и нижних 3 строк из всего набора данных, поскольку эти строки (диапазон значений) имели значения прибыли менее -50.

Может ли кто-нибудь, пожалуйста, помочь мне сделать это в программе R с помощью dplyr или с помощью некоторых других пакетов фильтрации?

Я был бы благодарен за вашу добрую поддержку.

С уважением, Фархан

Комментарии:

1. Чтобы уточнить, под «возрастанием» вы подразумеваете «становление более негативным»? И вы хотите удалить все смежные первую и последнюю строки с прибылью

2. Дорогой Джон, спасибо за ваш быстрый ответ. Да, это может привести к увеличению отрицательных значений в столбце Прибыль. А затем сверху и снизу все отрицательные смежные значения в прибыли, которые меньше -50, должны быть удалены, и это удаление должно касаться целых строк. Если первое значение сверху или снизу положительное, то диапазон ячеек сверху или снизу, сумма которых меньше -50, следует удалить все подмножество.

3. «Если первое значение сверху или снизу положительное, то диапазон ячеек сверху или снизу, сумма которых меньше -50, следует удалить все подмножество». — поэтому, если верх и низ gt; -50, удалите все строки gt;

4. Если сверху и снизу оба gt;-50, то смотрите сумму в диапазоне как сверху, так и снизу, и если сумма из диапазона gt;

Ответ №1:

Воспользуйся cumany . В сочетании с filter этим он удаляет строки до тех пор , пока не будет выполнен критерий (здесь Profit lt;= -50 ).

Первая команда-это способ разбора вашего Profit столбца на числовой столбец.

 library(dplyr)  data %gt;% mutate(Profit = parse_number(str_replace(Profit,"^-\$(.*)$", "$-\1"))) %gt;%   arrange(D30) %gt;%   filter(cumany(Profit gt; -50)) %gt;%   arrange(desc(D30)) %gt;%   filter(cumany(Profit gt; -50))    Profit MRO_15x5 D30 1 275.0 0.141 -0.027 2 -162.5 -1.578 -0.051 3 337.5 -1.049 -0.055 4 -175.0 -0.183 -0.056 5 100.0 -1.043 -0.059 6 -175.0 -0.235 -0.061 7 -175.0 -4.062 -0.103 8 412.5 -1.524 -0.194 9 -175.0 -3.336 -0.205 10 150.0 -9.189 -0.240 11 12.5 -6.076 -0.248  

Комментарии:

1. Огромное спасибо. Это сэкономит мне много времени на фильтрацию данных. Высоко ценю этот ответ.

2. Да, результаты абсолютно соответствуют требованиям. Спасибо за вашу поддержку.

3. Готово :). Спасибо