我一直在研究一种使用R从大型csv数据集中有效提取信息的方法。很多人似乎都推荐使用包ff。我成功地阅读了数据集,但现在遇到问题,试图将其子集化。
最大的数据集包含超过650,000行和1005列。并非所有列都包含相同的数据类型。作为数据框架查看,结构如下所示:
'data.frame': 5 obs. of 1005 variables:
$ SAMPLING_EVENT_ID : Factor w/ 5 levels "S6230404","S6252242",..: 2 1 3 4 5
$ LATITUDE : num 24.4 24.5 24.5 24.5 24.5
$ LONGITUDE : num -81.9 -81.9 -82 -82 -82
$ YEAR : int 2010 2010 2010 2010 2010
$ MONTH : int 4 3 10 10 10
$ DAY : int 97 88 299 298 300
$ TIME : num 9 10 10 11.58 9.58
$ COUNTRY : Factor w/ 1 level "United_States": 1 1 1 1 1
$ STATE_PROVINCE : Factor w/ 1 level "Florida": 1 1 1 1 1
$ COUNT_TYPE : Factor w/ 2 levels "P21","P22": 2 2 1 1 1
$ EFFORT_HRS : num 6 2 7 6 3.5
$ EFFORT_DISTANCE_KM : num 48.28 8.05 0 0 0
$ EFFORT_AREA_HA : int 0 0 0 0 0
$ OBSERVER_ID : Factor w/ 3 levels "obs132426","obs58643",..: 3 2 1 1 1
$ NUMBER_OBSERVERS : Factor w/ 2 levels "?","1": 2 1 2 2 2
$ Zenaida_macroura : int 0 0 1 0 0
所有其他变量与最后一个变量相似,即各种鸟类。
以下是我用来“成功:读取csv:
的代码B2010 <- read.table.ffdf (x = NULL, “filePath&Name", nrows = -1, first.rows = 50000, next.rows = 50000)
尝试了解ffdf输出,我输入了命令行,如dim(B2010),str(B2010),ls(B2010)等.dim(B2010)导致适当的行数但只有一列(a每个记录由逗号分隔的值的字符串),并且ls(B2010)输出“[1]”physical“”row.names“”virtual“而不是通常的变量列表。
我不知道如何处理这种类型的输出能够提取说STATE_PROVINCE ==“California”?我如何告诉B2010变量是什么?我想我需要以不同的方式看待这一点,但需要你的一些帮助才能弄明白。
我的最终目标是将一堆csv数据集(因为我每年有一个)进行分组,然后将结果重新组合成各种分析的数据帧。
谢谢, 乔
答案 0 :(得分:3)
要为ffdf配置子集,请使用ffbase包。 如在
require(ffbase)
x <- subset(B2010, BB2010$STATE_PROVINCE == “California”)
答案 1 :(得分:2)
我终于找到了解决方案,让ffdf变量名称和类型正确读取并可访问子集:
B2010&lt; - read.csv.ffdf(file =“filepath / name”,colClasses = c(“factor”,“numeric”,“numeric”,“integer”,“integer”,“integer”,“ numeric“,rep(”factor“,998)),first.rows = 10000,next.rows = 50000,nrows = -1)
这需要永远阅读,但似乎有效,即我能够创建数据的子集。下一步:将子集保存回“正常”数据帧和/或csv。
答案 2 :(得分:0)
根据?read.table.ffdf的帮助页面,您应该使用read.csv.ffdf(...)
。然后转到布兰登引用的页面。