Может быть, что-то вроде этого будет работать для вас.
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"