2016-08-15 10 views
0

Я хотел бы знать, если есть простой способ, чтобы пропустить символы, используя read_fwf из пакета readr в R.R readr :: read_fwf игнорировать символы с помощью fwf_widths

Например, изменение одного из примеров в документация

library(readr) 
fwf_sample <- system.file("extdata/fwf-sample.txt", package = "readr") 
read_fwf(fwf_sample, fwf_widths(c(2, -3,2, 3))) 

бросает ошибку:

Error: Begin offset (2) must be smaller than end offset (-1) 

Использование функции базовой read.fwf работает просто отлично, однако:

read.fwf(fwf_sample, widths = c(2,-3,2,3)) 

# V1 V2 V3 
#1 12 67 890 
#2 12 67 890 
#3 12 67 890 
#4 12 67 890 
#5 12 67 890 

Есть ли способ, который я могу имитировать, используя readr::read_fwf? (меня интересует главным образом причина производительности).

+0

Нет ошибок на моем machine.b Использование readr версии 1.0.0. в R 3.3.1. С другой стороны, отрицание не выполняется, и я получаю 4 столбца. –

+0

Я был на Ubuntu 64 бит с R 3.3.1 и readr 0.2.2 .. Я обновился до 1.0.0, и теперь у меня такая же проблема .. Я думаю, что буду придерживаться read.fwf на данный момент ... – lucacerone

ответ

1

Справка предлагает с помощью fwf_positions:

> read_fwf(fwf_sample, fwf_positions(c(1, 5, 8), c(2, 7, 10), col_names=paste0("V", 1:3))) 
Parsed with column specification: 
cols(
    V1 = col_character(), 
    V2 = col_character(), 
    V3 = col_character() 
) 
# A tibble: 3 x 3 
    V1 V2 V3 
    <chr> <chr> <chr> 
1 Jo Sm ith 
2 Ma Ha rtf 
3 Ev No lan 
+0

Спасибо, возможно, это единственный способ ... хотя мне это не нравится, потому что это очень многословно ... – lucacerone

+0

У вас есть исключительно странное представление о том, что подходит для «подробного» в программировании. –

+0

Я предпочитаю пропускать столбцы с использованием отрицательных чисел :) вместо того, чтобы строить два вектора. Я должен просто использоваться для чтения.fwf .. Я нахожу это чрезвычайно интуитивно понятным :) – lucacerone