小编xia*_*dai的帖子

修剪一个巨大的(3.5 GB)csv文件以读入R

所以我有一个数据文件(分号分隔),它有很多细节和不完整的行(导致Access和SQL扼流).它的县级数据集分为段,子段和子子段(总共约200个因子),为期40年.简而言之,它是巨大的,如果我试着简单地阅读它,它就不适应内存.

所以我的问题是,鉴于我想要所有的县,但只有一年(而且只是最高级别的细分......最终导致大约100,000行),最好的方法是什么汇总到R?

目前我正试图用Python来消除不相关的年份,通过一次读取和操作一行来绕过文件大小限制,但我更喜欢只有R的解决方案(CRAN包可以).有没有类似的方法在R中一次读取一个文件?

任何想法将不胜感激.

更新:

  • 约束
    • 需要使用我的机器,所以没有EC2实例
    • 仅作为R-only.在这种情况下速度和资源不是问题...只要我的机器不爆炸...
    • 如下所示,数据包含混合类型,我需要稍后进行操作
  • 数据
    • 数据为3.5GB,大约850万行和17列
    • 几千行(~2k)格式错误,只有一列而不是17列
      • 这些完全不重要,可以放弃
    • 我只需要这个文件中的~10,000行(见下文)

数据示例:

County; State; Year; Quarter; Segment; Sub-Segment; Sub-Sub-Segment; GDP; ...
Ada County;NC;2009;4;FIRE;Financial;Banks;80.1; ...
Ada County;NC;2010;1;FIRE;Financial;Banks;82.5; ...
NC  [Malformed row]
[8.5 Mill rows]
Run Code Online (Sandbox Code Playgroud)

我想砍掉一些列并从40个可用年份中挑选两个(2009-2010从1980年到2020年),这样数据可以适用于R:

County; State; Year; Quarter; Segment; GDP; ...
Ada County;NC;2009;4;FIRE;80.1; ...
Ada County;NC;2010;1;FIRE;82.5; ...
[~200,000 rows]
Run Code Online (Sandbox Code Playgroud)

结果:

在修改了所有建议后,我认为JD和Marek建议的readLines效果最好.我给了Marek支票,因为他提供了一个示例实施.

我在这里为我的最终答案复制了一个略微改编的Marek实现版本,使用strsplit和cat来保留我想要的列.

还应当指出,这是MUCH比Python效率较低......在,巨蟒通过要吃掉5分钟3.5GB文件,而R取约60 ...但如果你只为R,那么这是罚单.

## Open a connection separately to hold the cursor position
file.in <- file('bad_data.txt', 'rt')
file.out <- file('chopped_data.txt', 'wt')
line …
Run Code Online (Sandbox Code Playgroud)

csv r

86
推荐指数
7
解决办法
2万
查看次数

RMarkdown:如何更改字体颜色?

在RMarkdown中有一种指定字体颜色的方法吗?

浏览块选项时似乎没有选项

r r-markdown

67
推荐指数
6
解决办法
7万
查看次数

如何在每个组中创建滞后变量?

我有一个data.table:

set.seed(1)
data <- data.table(time = c(1:3, 1:4),
                   groups = c(rep(c("b", "a"), c(3, 4))),
                   value = rnorm(7))

data
#    groups time      value
# 1:      b    1 -0.6264538
# 2:      b    2  0.1836433
# 3:      b    3 -0.8356286
# 4:      a    1  1.5952808
# 5:      a    2  0.3295078
# 6:      a    3 -0.8204684
# 7:      a    4  0.4874291
Run Code Online (Sandbox Code Playgroud)

我想每个"组"级别计算"值"列的滞后版本.

结果应该是这样的

#   groups time      value  lag.value
# 1      a    1  1.5952808         NA
# 2      a    2  0.3295078  1.5952808 …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr data.table

58
推荐指数
4
解决办法
6万
查看次数

如何在Matlab中删除向量中的零分量?

我有一个矢量例如

a = [0 1 0 3]
Run Code Online (Sandbox Code Playgroud)

我想把a变成等于的b b = [1 3].

我一般如何执行此操作?所以我有一个零元素的向量,我想删除零,只留下非零数字?

matlab

38
推荐指数
2
解决办法
15万
查看次数

如何在R中获得机器epsilon?

是否存在将机器epsilon存储在R中的常量?

r numerical-methods

36
推荐指数
2
解决办法
2万
查看次数

R:如何在加载包时运行一些代码?

我正在学习为R构建一个包.现在要设置它,我需要在加载包时运行一些代码require(myPackage).

我阅读的文档help(".onLoad")只是让我感到困惑,因为没有例子.我如何实际使用.onLoad

有人能告诉我一个简单的例子吗?例如,我知道export(myfun)在NAMESPACE文件中将导出myfun以供使用,我需要rnorm(10)在包加载时运行的代码是什么?

r r-package

35
推荐指数
1
解决办法
5060
查看次数

R:如何使用RMarkdown ioslides制作二级缩进项目符号?

如何从Rstudio在RMarkdown中制作二级子弹?

我试过了

* Level1
  + leve2
Run Code Online (Sandbox Code Playgroud)

它不起作用.从教程中不清楚如何做到这一点.这在普通的RMarkdown中看起来很简单.

r r-markdown

34
推荐指数
2
解决办法
3万
查看次数

R:在RStudio中如何将knitr输出到另一个文件夹以避免混乱我的驱动器?

我正在使用RStudio的编织HTMl函数来输出一些演示文稿.但它总是将文件输出到我当前的工作目录.如何将其输出到另一个目录,以便我的目录是干净的,只有原始的.rmd文件?

r rstudio knitr

26
推荐指数
2
解决办法
7678
查看次数

为什么:=允许作为中缀运算符?

我遇到了流行的data.table包装,有一件事特别引起了我的兴趣.它有一个就地分配操作符

:=

这在基础R中没有定义.事实上,如果你没有加载data.table包,如果你试图使用它(例如a := 2),它会引发错误:

错误:无法找到功能 ":="

另外,为什么:=工作?为什么R允许您定义:=为中缀运算符,而其他每个中缀函数都必须被包围%%,例如

`:=` <- function(a, b) {
   paste(a,b)
}

"abc" := "def"
Run Code Online (Sandbox Code Playgroud)

显然,它并不是%function.name%用于定义中缀函数的替代语法.正在data.table利用R的一些解析怪癖?这是一个黑客?它将来会被"修补"吗?

r data.table colon-equals

21
推荐指数
2
解决办法
1279
查看次数

Julia:如何漂亮地打印一个数组?

a= zeros(4,4)
Run Code Online (Sandbox Code Playgroud)

a像这样打印

> 4×4 Array{Float64,2}:
>  0.0  0.0  0.0  0.0
>  0.0  0.0  0.0  0.0
>  0.0  0.0  0.0  0.0
>  0.0  0.0  0.0  0.0
Run Code Online (Sandbox Code Playgroud)

println(a)像这样打印

[0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0]
Run Code Online (Sandbox Code Playgroud)

如何a在函数中以前一种方式“打印” ?我想要它用于调试目的。

julia

18
推荐指数
2
解决办法
5705
查看次数