Как определить количество строк, содержащих пустые строки ("") в каждом столбце таблицы data.table? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть большая таблица данных из нескольких миллионов строк.Я преобразовал все столбцы в факторы и заменил все NA пустыми строками ("").Я хотел бы определить количество пустых строк в каждом столбце, в идеале эффективным способом памяти.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Мы можем использовать colSums от base R

colSums(df == "")
0 голосов
/ 10 февраля 2019

Решение без пакетов будет выглядеть так:

apply(df, 2, function(x) sum(x == ""))

Однако это может быть медленным, и вы можете воспользоваться некоторыми из библиотек.

Например, вот как выглядит решение dplyr:

library(dplyr)

df %>%
  summarise_all(funs(sum(. == "")))

Однако, если вы работаете с большими кадрами данных, вы, вероятно, выиграете от еще более быстрогоdata.table:

library(data.table)

setDT(df)[, lapply(.SD, function(x) sum(x == ""))]

Но давайте не будем забывать, что может быть более гибкое и быстрое решение tidyverse (по сравнению с dplyr):

library(purrr)

map_int(df, function(x) sum(x == ""))

Кто победитВот?

Я провел быстрый тест для таблицы с 400 000 строк и 26 столбцов, и data.table кажется самым быстрым в среднем (единица измерения - миллисекунды):

      expr       min        lq      mean    median        uq       max neval
     purrr  56.80567  58.76752  71.99501  64.61143  78.72492  199.9948   100
     dplyr  70.65627  73.17036  85.56228  79.73072  93.51717  194.7238   100
      base 689.97336 771.03395 830.39465 794.20452 881.38988 1116.8218   100
 datatable  57.83673  60.17200  70.97264  64.60314  78.89446  165.2100   100

Однако, purrr на самом деле не отстает, с другим пробегом он может также обогнать DT.Если вы уже используете один или другой, все будет хорошо, просто придерживайтесь его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...