Alguém pode me dizer como ler apenas os primeiros 6 meses (7 colunas) para cada ano dos dados abaixo, por exemplo, usando read.table()
?
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2009 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2010 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2011 -21 -27 -2 -6 -10 -32 -13 -12 -27 -30 -38 -29
NULL
como classe de coluna em sua resposta .Respostas:
Digamos que os dados estejam no arquivo
data.txt
, você pode usar ocolClasses
argumento deread.table()
para pular colunas. Aqui estão os dados nas 7 primeiras colunas"integer"
e definimos as 6 colunas restantes para"NULL"
indicar que elas devem ser puladasMude
"integer"
para um dos tipos aceitos, conforme detalhado em?read.table
dependendo do tipo real de dados.data.txt
se parece com isso:e foi criado usando
onde
dat
estaSe o número de colunas não for conhecido anteriormente, a função de utilitário
count.fields
lerá o arquivo e contará o número de campos em cada linha.fonte
nrows
. Em seguida, calcule quantas colunas estão usandoncol()
ou, no entanto, você deseja calcular o número de colunas a serem lidas / ignoradas. Em seguida, leia o arquivo completo usando essas informações.count.fields()
que automatiza o processo sugerido nos comentários.count.fields()
uma conexão de texto, então, leia alguns subconjuntos de linhas usandotxt <- readLines(....)
, então crie uma conexão com as linhas de leituracon <- textConnection(txt)
e então façacount.fields(txt)
. Certifique-se de usarskip
emcount.fields()
pular a linha de cabeçalho, se houver; você não pode pular linhas no arquivo usandoreadLines()
.Para ler um conjunto específico de colunas de um conjunto de dados, existem várias outras opções:
1) Com a
fread
partir dodata.table
pacote:Você pode especificar as colunas desejadas com o
select
parâmetro a partirfread
dodata.table
pacote. Você pode especificar as colunas com um vetor de nomes ou números de colunas.Para o exemplo de conjunto de dados:
Como alternativa, você pode usar o
drop
parâmetro para indicar quais colunas não devem ser lidas:Todos resultam em:
ATUALIZAÇÃO: Quando você não deseja
fread
retornar uma tabela de dados , use odata.table = FALSE
parâmetro-por exemplo:fread("data.txt", select = c(1:7), data.table = FALSE)
2) Com a
read.csv.sql
partir dosqldf
pacote:Outra alternativa é a
read.csv.sql
função dosqldf
pacote:3) Com as
read_*
funções doreadr
pacote:Na documentação, uma explicação para os caracteres usados com
col_types
:fonte
fread
não suporta arquivos compactados, no entanto. Arquivos grandes geralmente são compactados.fread
. É importante notar quefread
, provavelmente, o arquivo descompactado será muito mais rápido do queread.table
o arquivo compactado. Veja aqui um exemplo .read.table
não o salvará. Nesse caso, você pode querer olhar para off
pacote-.fread
para ler grandes arquivos compactados como este:fread("gunzip -c data.txt.gz", drop = c(8:13))
.Você também pode usar o JDBC para conseguir isso. Vamos criar um arquivo csv de amostra.
Faça o download e salve o driver CSV JDBC neste link: http://sourceforge.net/projects/csvjdbc/files/latest/download
fonte
Você faz assim:
fonte