Процесс фильтрации не получает полные данные?Использование фильтра dplyr и grep - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть этот файл журнала, который содержит около 1200 символов (макс.) В строке.То, что я хочу сделать, это сначала прочитать, а затем извлечь определенные части файла в новые столбцы.Я хочу извлечь строки, содержащие текст «[DF_API: входная строка]».Когда я читаю, а затем фильтрую на основе интересующих меня строк, мне кажется, что я теряю данные.Я попробовал это с использованием фильтра dplyr и стандартного grep с тем же результатом.

Не уверен, почему это так.Ценю вашу помощь с этим.Код и данные есть по следующей ссылке.Satish

Код указан ниже

library(dplyr)
setwd("C:/Users/satis/Documents/VF/df_issue_dec01")

sec1 <- read.delim(file="secondary1_aa_small.log")
head(sec1)
names(sec1) <- c("V1")
sec1_test <- filter(sec1,str_detect(V1,"DF_API: input string")==TRUE)
head(sec1_test)

sec1_test2 = sec1[grep("DF_API: input string",sec1$V1, perl = TRUE),]
head(sec1_test2)

write.csv(sec1_test, file = "test_out.txt", row.names = F, quote = F)
write.csv(sec1_test2, file = "test2_out.txt", row.names = F, quote = F)

Данные (и код) приведены по ссылке ниже.Извините, я должен был использовать dput.

https://spaces.hightail.com/space/arJlYkgIev

1 Ответ

0 голосов
/ 27 декабря 2018

Попробуйте приведенный ниже код, который может дать вам кадр данных отфильтрованных строк из вашего файла на основе соответствующего условия.

#to read your file
sec1 <- readLines("secondary1_aa_small.log")
#framing a dataframe by extracting required lines from above file
new_sec1 <- data.frame(grep("DF_API: input string", sec1, value = T))
names(new_sec1) <- c("V1")

Редактировать: простой способ разбить вышеуказанный столбец на несколько столбцов

#extracting substring in between < & >
new_sec1$V1 <- gsub(".*[<\t]([^>]+)[>].*", "\\1", new_sec1$V1)
#replacing comma(,) with a white space
new_sec1$V1 <- gsub("[,]+", " ", new_sec1$V1)
#splitting into separate columns
new_sec1 <-  strsplit(new_sec1$V1, " ")
new_sec1 <-  lapply(new_sec1, function(x) x[x != ""] )
new_sec1 <-  do.call(rbind, new_sec1)
new_sec1 <- data.frame(new_sec1)

Измените имена столбцов для вашего анализа.

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