仅导入与特定值匹配的行

时间:2014-06-06 21:18:31

标签: r

我是R的新手,正在使用read.csv导入数据集。我正在使用的数据集可在此处获取:http://archive.ics.uci.edu/ml/machine-learning-databases/00235/。我不想导入整个数据集然后将我需要的内容进行子集化,而是只想从一开始就导入我需要的部分。数据集中的第一列标题为“日期”,我只需要与2007年4月第一周相对应的数据。要读取整个数据集,我可以执行以下操作:

initial <- read.table("household_power_consumption.txt", sep = ";", nrows = 100)
classes <- sapply(initial, class)
powerconsumption <- read.table(file = "household_power_consumption.txt",colClasses = classes, sep = ";", header = TRUE, col.names = c("Date", "Time", "Global_active_power", "Global_reactive_power", "Voltage", "Global_intensity", "Sub_metering_1", "Sub_metering_2", "Sub_metering_3"))

但是,我想知道是否有?read.table的解决方法允许仅导入数据集的一部分,如下所示:

powerconsumption <- read.table(file = "household_power_consumption.txt",colClasses = classes, sep = ";", header = TRUE, col.names = c("Date", "Time", "Global_active_power", "Global_reactive_power", "Voltage", "Global_intensity", "Sub_metering_1", "Sub_metering_2", "Sub_metering_3"), col = (Date==c("1/2/2007", "2/7/2007")))

请注意添加, col = (Date==c("1/2/2007", "2/7/2007")))

1 个答案:

答案 0 :(得分:0)

read.table函数执行相当多的处理,并且可能会使用大文件陷入困境,除非您已经演示了使用colClasses。因此,如果您只想要一个小的子集,那么从&#34;未消化的&#34;中选择几行可能对您有利。版。你可以用两种方式做到这一点。禁食可能是用sed或awk进行外部处理。这里&#39; sa link doing data comparison in awk.但是,我会告诉你如何用R做这件事。我将在2007年4月的第一周带你去naturla语言请求并假设你的日期不是POSIX标准格式,而是n / n / nnnn格式,并且没有前导零。

 Lines <- readLines("household_power_consumption.txt")
 subL <- grep("^[1234567]/5/2007", substr(Lines, 1,8)  # a numeric vector
 inSub <- read.table(text=Lines[subL,,], header = TRUE, col.names = c("Date", "Time", "Global_active_power", "Global_reactive_power", "Voltage", "Global_intensity", "Sub_metering_1", "Sub_metering_2", "Sub_metering_3"))

我担心我不愿意下载20MB的文件来回答这个问题,因此您可以发布更好的说明或head()来自您的首字母&#39;数据对象