Удаление значений NULL из таблицы - PullRequest
0 голосов
/ 11 октября 2019

У меня есть таблица со значениями NUll в столбце, эти нулевые значения добавляют к дополнительной метке на графике Highchart. Как манипулировать данными с помощью Dplyr, чтобы избавиться от строк, имеющих нулевые значения в определенном столбце?

Я думал внести изменения в запросы SQL бэкэнда и отфильтровать результат для желаемого результата. Но это неправильный способ.

Это не работает,

   dplyr::filter(!is.na(ColumnWithNullValues)) %>%

Фактический код:

df <- data() %>%
      dplyr::filter(CreatedBy == 'owner') %>%
      dplyr::group_by(`Reason for creation`) %>%
      dplyr::arrange(ReasonOrder) %>%

ColumnWithNullValues ​​<- Этот столбец имеет значения Null. </p>

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Вот один вариант с base R

df[!sapply(df$ColumnWithNullValues, is.null),]

data

library(tibble)
df <- tibble(
  ColumnWithNullValues = list(c(1:5), NULL, c(6:10)))
0 голосов
/ 11 октября 2019

Вот небольшой пример: df:

library(dplyr)
library(purrr)
df <- tibble(
  ColumnWithNullValues = list(c(1:5), NULL, c(6:10))
)
df
#> # A tibble: 3 x 1
#>   ColumnWithNullValues
#>   <list>              
#> 1 <int [5]>           
#> 2 <NULL>              
#> 3 <int [5]>

В этом случае наиболее логичным может показаться использование:

df %>% 
  filter(!is.null(ColumnWithNullValues))
#> # A tibble: 3 x 1
#>   ColumnWithNullValues
#>   <list>              
#> 1 <int [5]>           
#> 2 <NULL>              
#> 3 <int [5]>

Но, как вы можете видеть, это не работает. Вместо этого нам нужно использовать map / sapply / vapply, чтобы попасть внутрь списка. Например, вот так:

df %>% 
  filter(map_lgl(ColumnWithNullValues, function(x) !all(is.null(x))))
#> # A tibble: 2 x 1
#>   ColumnWithNullValues
#>   <list>              
#> 1 <int [5]>           
#> 2 <int [5]>

Но, как объясняет @akrun в комментарии, не возможно, чтобы элемент в списке содержал NULL среди других значений. Таким образом, мы можем упростить код до этого:

df %>% 
  filter(!map_lgl(ColumnWithNullValues, is.null))
#> # A tibble: 3 x 1
#>   ColumnWithNullValues
#>   <list>              
#> 1 <int [5]>           
#> 2 <int [5]>
...