Исправление проблемы столбца при импорте данных в R - PullRequest
0 голосов
/ 26 октября 2019

В настоящее время возникла проблема с импортом набора данных твитов, так что каждое наблюдение находится в одном столбце

Это данные перед импортом;он включает в себя три ячейки для каждого твита и пробел между ними.

T   2009-06-11 00:00:03
U   http://twitter.com/imdb
W   No Post Title

T   2009-06-11 16:37:14
U   http://twitter.com/ncruralhealth
W   No Post Title

T   2009-06-11 16:56:23
U   http://twitter.com/boydjones
W   listening to "Big Lizard - The Dead Milkmen" ♫ http://blip.fm/~81kwz
library(tidyverse)

tweets1 <- read_csv("tweets.txt.gz", col_names = F, 
                    skip_empty_rows = F)

Это вывод:

Parsed with column specification:
cols(
  X1 = col_character()
)
Warning message:
“71299 parsing failures.
row col  expected    actual            file
 35  -- 1 columns 2 columns 'tweets.txt.gz'
 43  -- 1 columns 2 columns 'tweets.txt.gz'
 59  -- 1 columns 2 columns 'tweets.txt.gz'
 71  -- 1 columns 5 columns 'tweets.txt.gz'
107  -- 1 columns 3 columns 'tweets.txt.gz'
... ... ......... ......... ...............
See problems(...) for more details.
”
# A tibble: 1,220,233 x 1
   X1                                   
   <chr>                                
 1 "T\t2009-06-11 00:00:03"             
 2 "U\thttp://twitter.com/imdb"         
 3 "W\tNo Post Title"                   
 4 NA                                   
 5 "T\t2009-06-11 16:37:14"             
 6 "U\thttp://twitter.com/ncruralhealth"
 7 "W\tNo Post Title"                   
 8 NA                                   
 9 "T\t2009-06-11 16:56:23"             
10 "U\thttp://twitter.com/boydjones"    
# … with 1,220,223 more rows

Единственная проблема - множество ошибок синтаксического анализа,где problem (tweets1) показывает, что R ожидал один столбец, но получил несколько. Есть какие нибудь идеи как это починить? По словам моего профессора, мои результаты должны дать мне 1,4 миллиона строк, поэтому я не уверен, что эта проблема анализа является ключевой. Любая помощь приветствуется!

1 Ответ

1 голос
/ 26 октября 2019

Может быть, что-то вроде этого будет работать для вас.

data

data <- 'T   2009-06-11 00:00:03
U   http://twitter.com/imdb
W   No Post Title

T   2009-06-11 16:37:14
U   http://twitter.com/ncruralhealth
W   No Post Title

T   2009-06-11 16:56:23
U   http://twitter.com/boydjones
W   listening to "Big Lizard - The Dead Milkmen" ♫ http://blip.fm/~81kwz'

Для большого файла fread() должно быть быстрым. sep = NULL говорит в основном просто читать в полных строках. Вы замените input = data на file = "tweets.txt.gz".

library(data.table)

read_rows <- fread(input = data, header = FALSE, sep = NULL, blank.lines.skip = TRUE)

обработка

Вы могли бы просто остаться с data.table, но я уже заметил вас в tidyverse.

library(dplyr)
library(stringr)
library(tidyr)

Обычно я беру первый символ (T, U, W) и сохраняю его в переменную с именем Column. Я добавляю еще один столбец с именем Content для остальной части строки, с пробелами, урезанными на обоих концах. Я также добавил столбец ID, чтобы знать, как группировать кластеры по 3 рядам.

Тогда вы просто поворачиваетесь к Column. Я не уверен, если вы хотели этот последний шаг или нет, поэтому удалите при необходимости.

read_rows %>%
  mutate(ID = rep(1:3, each = n() / 3),
         Column = str_sub(V1, 1, 1),
         Content = str_trim(str_sub(V1, 2))) %>%
  select(-V1) %>%
  pivot_wider(names_from = Column, values_from = Content)

результат

# A tibble: 3 x 4
     ID T                   U                                W                                                                         
  <int> <chr>               <chr>                            <chr>                                                                     
1     1 2009-06-11 00:00:03 http://twitter.com/imdb          No Post Title                                                             
2     2 2009-06-11 16:37:14 http://twitter.com/ncruralhealth No Post Title                                                             
3     3 2009-06-11 16:56:23 http://twitter.com/boydjones     "listening to \"Big Lizard - The Dead Milkmen\" ♫ http://blip.fm/~81kwz"
...