Удаление строк с определенными значениями столбцов в dplyr

#r #dplyr

Вопрос:

Я хочу удалить только те строки, которые содержат отрицательное значение во всех столбцах. Например, взгляните на мой набор данных следующим образом: Итак, я хочу удалить только строку 4.

 Variable 1   Variable 2   Variable 3    Variable 4    Variable 5   Variable 6    Variable 7
   2            -9             4             3             2           3             5  
   3            -7             4             3             3           5             3
   4             5             5             1             5           3             2
  -5            -1            -9            -9            -7          -1            -6
  -9             3             3             2             3           4             3
  -5            -9             2             1             3           4             2
   3             2             1             5             5           5             1
   4             4            -3            -3             6           5             4
 

Ответ №1:

Используйте либо if_all и отрицайте ( ! )

 library(dplyr)
df1 <- df1 %>% 
   filter(!if_all(everything(), ~ . < 0))
 

Или использовать if_any

 df1 <- df1 %>% 
    filter(if_any(everything(), ~ . >= 0))
df1
 Variable1 Variable2 Variable3 Variable4 Variable5 Variable6 Variable7
1         2        -9         4         3         2         3         5
2         3        -7         4         3         3         5         3
3         4         5         5         1         5         3         2
4        -9         3         3         2         3         4         3
5        -5        -9         2         1         3         4         2
6         3         2         1         5         5         5         1
7         4         4        -3        -3         6         5         4
 

данные

 df1 <- structure(list(Variable1 = c(2L, 3L, 4L, -5L, -9L, -5L, 3L, 4L
), Variable2 = c(-9L, -7L, 5L, -1L, 3L, -9L, 2L, 4L), Variable3 = c(4L, 
4L, 5L, -9L, 3L, 2L, 1L, -3L), Variable4 = c(3L, 3L, 1L, -9L, 
2L, 1L, 5L, -3L), Variable5 = c(2L, 3L, 5L, -7L, 3L, 3L, 5L, 
6L), Variable6 = c(3L, 5L, 3L, -1L, 4L, 4L, 5L, 5L), Variable7 = c(5L, 
3L, 2L, -6L, 3L, 2L, 1L, 4L)), class = "data.frame", row.names = c(NA, 
-8L))
 

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

1. Спасибо! А что, если бы мне пришлось удалить только те строки, которые содержат отрицательные значения в столбцах 6 и 7?

2. @TannyaKumar использовать df1 %>% filter(!if_all(c(6,7), ~ . < 0))

3. Привет, я не вижу, чтобы столбцы удалялись, что означает, что удаление не произошло.

4. @TannyaKumar просто выполни задание, т. е. df1 <- df1 %>% filter(if_any(everything(), ~ . >= 0))

5. Без назначения, он просто выводится на консоль, и изменения автоматически не выполняются для нужного вам объекта df1 <- df1 %>%..