所以我有一个数据文件(分号分隔),它有很多细节和不完整的行(导致Access和SQL扼流).它的县级数据集分为段,子段和子子段(总共约200个因子),为期40年.简而言之,它是巨大的,如果我试着简单地阅读它,它就不适应内存.
所以我的问题是,鉴于我想要所有的县,但只有一年(而且只是最高级别的细分......最终导致大约100,000行),最好的方法是什么汇总到R?
目前我正试图用Python来消除不相关的年份,通过一次读取和操作一行来绕过文件大小限制,但我更喜欢只有R的解决方案(CRAN包可以).有没有类似的方法在R中一次读取一个文件?
任何想法将不胜感激.
更新:
数据示例:
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) 我有一个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) 我有一个矢量例如
a = [0 1 0 3]
Run Code Online (Sandbox Code Playgroud)
我想把a变成等于的b b = [1 3].
我一般如何执行此操作?所以我有一个零元素的向量,我想删除零,只留下非零数字?
我正在学习为R构建一个包.现在要设置它,我需要在加载包时运行一些代码require(myPackage).
我阅读的文档help(".onLoad")只是让我感到困惑,因为没有例子.我如何实际使用.onLoad?
有人能告诉我一个简单的例子吗?例如,我知道export(myfun)在NAMESPACE文件中将导出myfun以供使用,我需要rnorm(10)在包加载时运行的代码是什么?
如何从Rstudio在RMarkdown中制作二级子弹?
我试过了
* Level1
+ leve2
Run Code Online (Sandbox Code Playgroud)
它不起作用.从教程中不清楚如何做到这一点.这在普通的RMarkdown中看起来很简单.
我正在使用RStudio的编织HTMl函数来输出一些演示文稿.但它总是将文件输出到我当前的工作目录.如何将其输出到另一个目录,以便我的目录是干净的,只有原始的.rmd文件?
我遇到了流行的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的一些解析怪癖?这是一个黑客?它将来会被"修补"吗?
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在函数中以前一种方式“打印” ?我想要它用于调试目的。
r ×8
data.table ×2
r-markdown ×2
colon-equals ×1
csv ×1
dplyr ×1
julia ×1
knitr ×1
matlab ×1
plyr ×1
r-package ×1
rstudio ×1