2016-12-09 4 views
2

У меня есть огромный набор данных в виде файла txt со значениями, разделенными полуколонами и имеющими близкие к 2М строки. Мне нужны данные, соответствующие только определенным датам в первом столбце. Ввод пробы показано ниже:Фильтровать значения столбцов при чтении с использованием read.csv в R

Date;Time;Global_active_power;Global_reactive_power;Voltage;Global_intensity;Sub_metering_1;Sub_metering_2;Sub_metering_3 
16/12/2006;17:24:00;4.216;0.418;234.840;18.400;0.000;1.000;17.000 
16/12/2006;17:25:00;5.360;0.436;233.630;23.000;0.000;1.000;16.000 
16/12/2006;17:26:00;5.374;0.498;233.290;23.000;0.000;2.000;17.000 

Пожалуйста, помогите мне, чтобы отфильтровать данные, соответствующие двум датам сказать 1/2/2007 и 2/2/2007

+0

Относительно легко отбрасывать столбцы в вызове 'read.csv' через аргумент col.classes. Если ваши данные упорядочены по дате, вы можете определить набор строк, которые вы хотите прочитать вручную, а затем использовать аргумент skip и nrows для чтения в этих строках. – lmo

+0

Возможно, некоторые идеи здесь: http://stackoverflow.com/questions/6592219/read-csv-from-specific-row/6592373#6592373 – MrFlick

+1

Кроме того, если этот набор данных приближается к потреблению вашей доступной памяти, вы должны принять посмотрите 'fread' в' data.table' или 'read.csv.raw' /' read.chunk' в 'iotools'. – lmo

ответ

5

Вот хороший ответ на фильтрации при импорте данных: https://stackoverflow.com/a/15967406/1152809

В принципе, вам необходимо использовать sqldf для фильтрации во время импорта. Вот что-то вроде того, что вам нужно:

install.packages("sqldf") 
library(sqldf) 
df <- read.csv.sql("sample.csv", "select *, from file where Date = '01/02/2007' or Date = '2/2/2007 ", sep=";") 

Однако, я не проверял это, потому что вы не дали нам dput ваших данных. Взгляните на этот пост за info on how to do a good post по R.

Ваши даты строки, поэтому они могут использовать вышеизложенное. Однако, если вы хотите использовать специальные функции, такие как BETWEEN, вам нужно будет изменить их в правильном формате. Вот пример:

df <- read.csv.sql("sample.csv", "select *, strftime('%d/%m/%Y', Date) as DateFormated from file where DateFormatted >= 1/2/2007 and DateFormatted <= 2/2/2007 ", sep=";") 
+1

Спасибо Трэвис. Он работал input <- read.csv.sql ("hous_power_consumption.txt", "выберите * из файла, где Date = '1/1/2007' или Date = '2/2/2007'", sep = ";") –

+0

Отлично! Рад помочь! –