0

我一直在研究一种使用 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) 产生了适当的行数,但只有一列(每条记录一个字符串逗号分隔的值),并且 ls(B2010) 输出“[1] "physical" "row.names" "virtual" 而不是通常的变量列表。

我不确定如何处理这种类型的输出以便能够提取 STATE_PROVINCE == “California”?我如何告诉 B2010 变量是什么?我想我需要以不同的方式看待这个问题,但需要你的帮助才能弄清楚。

我的最终目标是对一堆 csv 数据集进行子集化(因为我每年都有一个)并将结果重新组合在一起作为数据框进行各种分析。

谢谢,乔

4

3 回答 3

3

要子集 ffdf,请使用 ffbase 包。如在

require(ffbase)
x <- subset(B2010, BB2010$STATE_PROVINCE == “California”)
于 2012-09-14T07:45:51.723 回答
2

我终于找到了正确读取和访问 ffdf 变量名称和类型以进行子集化的解决方案:

B2010 <- 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。

于 2012-09-18T01:06:44.087 回答
0

根据 ?read.table.ffdf 的帮助页面,您应该使用read.csv.ffdf(...). 然后转到布兰登引用的页面。

于 2012-09-14T00:26:34.140 回答