Как удалить пустые строки после импорта данных CSV в R - PullRequest
3 голосов
/ 26 июня 2019

Я объединяю несколько больших CSV-файлов с временем прибытия (ATA) и отправления (ATD) объектов. После объединения файлов я не могу удалить <NA> строки, используя привычные методы. Происхождение может быть в различии между файлами Windows и Unix в новой строке и возврате каретки. Но я не хочу изменять файлы CSV. Я хочу иметь возможность исправить кадр данных в R.

Я объединяю несколько больших CSV-файлов, содержащих одинаковые переменные, например ::1004

# read csv files
df1 <- read.csv("data_1.csv", stringsAsFactors = FALSE)
df2 <- read.csv("data_2.csv", stringsAsFactors = FALSE)
df3 <- read.csv("data_3.csv", stringsAsFactors = FALSE)

# combine csv files
combidat <- rbind(df1, df2, df3)

# remove duplicate entries
combidat <- combidat[!duplicated(combidat), ]

Чтобы удалить записи с <NA> в идентификаторе (первая переменная столбца), я использую одну из нескольких:

combidat <- combidat[!is.na(combidat$ID),]
combidat <- combidat[complete.cases(combidat[ , 1]),]
combidat <- combidat[rowSums(is.na(combidat)) != ncol(combidat),]

Я также нашел:

combidat <- combidat[-which(apply(combidat,1,function(x)all(is.na(x)))),]

Но я не могу использовать этот подход. Если я это сделаю, combidat станет пустым.

Если я проверю результат:

combidat[is.na(combidat$ID),]

Я получаю:

 [1] ID            ATA            ATD            object
<0 rows> (or 0-length row.names)

Однако, если я проверяю несоответствия, то есть время отправления до времени прибытия:

combidat[(ATD<ATA),]

Я получаю:

               ID                      ATA                       ATD    object
233      51586002      2016-03-14 09:44:00       2016-03-14 09:00:00    car718
798      54846070      2016-06-19 01:37:00       2016-04-07 23:59:00    car276
4126     56066767      2016-03-31 14:00:00       2016-03-30 07:00:00    car089
NA             NA                     <NA>                      <NA>        NA
NA.1           NA                     <NA>                      <NA>        NA
NA.2           NA                     <NA>                      <NA>        NA
NA.3           NA                     <NA>                      <NA>        NA
NA.4           NA                     <NA>                      <NA>        NA
NA.5           NA                     <NA>                      <NA>        NA
NA.6           NA                     <NA>                      <NA>        NA
NA.7           NA                     <NA>                      <NA>        NA

Я надеюсь получить:

               ID                      ATA                       ATD    object
233      51586002      2016-03-14 09:44:00       2016-03-14 09:00:00    car718
798      54846070      2016-06-19 01:37:00       2016-04-07 23:59:00    car276
4126     56066767      2016-03-31 14:00:00       2016-03-30 07:00:00    car089

Любое объяснение, что я делаю неправильно и как это исправить, было бы очень признательно.

[Дополнение 28 июня 2019 г.] Что-то не так с импортированными CSV-файлами. Каким-то образом переводы строк / переносов возвращаются в поле данных, интерпретируются как маркеры конца записи. Я жонглировал цитатой:

df1 <- read.csv("data_1.csv", stringsAsFactors = FALSE, quote = "\"'")

И это имеет какое-то влияние, но я не правильно понимаю.

1 Ответ

0 голосов
/ 26 июня 2019
combidat <- combidat[which(!is.na(combidat$ID)),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...