我正在尝试使用fread包中的函数输入一个大的制表符分隔文件(大约2GB)data.table.但是,因为它太大了,所以它并不完全适合内存.我试图通过使用skip和nrow参数来输入它,例如:
chunk.size = 1e6
done = FALSE
chunk = 1
while(!done)
{
temp = fread("myfile.txt",skip=(chunk-1)*chunk.size,nrow=chunk.size-1)
#do something to temp
chunk = chunk + 1
if(nrow(temp)<2) done = TRUE
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我一次读取100万行,对它们进行计算,然后得到下一百万行等.这段代码的问题是在检索fread到每个块后,需要开始扫描文件从一开始就经过每次循环迭代后,skip增加了一百万.结果,在每个块之后,fread实际到达下一个块需要更长和更长时间,这使得效率非常低.
有没有办法告诉你fread暂停每一个说100万行,然后继续阅读从那一点开始而不必重新开始?任何解决方案,还是应该是新功能请求?
stargazer自动居中表中的值.如何左列对齐?
将此代码放在.Rnw文件中并使用knitr转换为.tex:
<<load, echo=FALSE, warning=FALSE, message=FALSE>>=
opts_chunk$set(eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE, dpi=300)
@
\documentclass[a4paper,11pt]{article}
\usepackage{lipsum} % Required to insert dummy text
\begin{document}
\title{}
\author{}
\date{\today}
\maketitle
\section{Header}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. …Run Code Online (Sandbox Code Playgroud) 在RStudio中使用knitr,在for循环中,pander不会产生任何(或正确的)html输出.这是一个最小的情况,作为Rmd输入文件.
---
title: "Untitled"
output: html_document
---
Testing why pander doesn't work in for loop
```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.width=7, fig.height=5, echo=FALSE, warning=FALSE,
message=FALSE)
```
```{r}
library(pander)
r <- 1:10
print("pander at top level")
pander(summary(r)) # works
print("pander in for loop")
for (i in 1:2) pander(summary(r)) #does not work (nothing in output)
for (i in 1:2) print(pander(summary(r))) #does not work (code in output)
for (i in 1:2) print(summary(r)) # works
```
Run Code Online (Sandbox Code Playgroud)
对于其他(更有趣的)"摘要"对象,结果是相同的,例如lm拟合的摘要.对于来自CRAN的pander 0.5.2观察到相同的行为,并且还从github加载0.5.3.
RStudio v 0.99.467.
> sessionInfo()
R version 3.2.0 …Run Code Online (Sandbox Code Playgroud) 我有一个包含日期的文本文件,并希望将其转换为数据表.
转换03-FEB-2011等日期可以完成
data$fecha <- as.Date(data$textDate , "%d-%b-%Y")
Run Code Online (Sandbox Code Playgroud)
问题是这个专栏是西班牙语,所以我不会得到Jan但是Ene,或者8月而是Ago.如何更改语言环境,以便%b缩写适用于西班牙语?有没有其他方法来实现这一目标?
从字面上看,我恐怕失去了阴谋!为什么axis命令没有将x轴放在下图中?它一定是荒谬的,因为我不能简化太多.
yar <- c(.2,.1,.05,.03,.02)
plot(yar,xaxt='n')
axis(1, at=c(0.01,0.02,0.03,0.04,0.05))
Run Code Online (Sandbox Code Playgroud) 我试图从一串文本中解析一个日期.我假设最好的方法是使用正则表达式,但我还没有找到一个有效的解决方案.
首先,我使用CSS选择器从网站上获取日期.
date <-html_nodes(x=doc, css=".middleheadline+ .topnewsbar b") %>% html_text()
Run Code Online (Sandbox Code Playgroud)
这会产生:
[1] "\r\n Washington,\r\n Jan 5, 2011"
Run Code Online (Sandbox Code Playgroud)
我想从这个字符串中提取日期本身(这里是2011年1月5日).注意:月份可以是任何月份,日期可以是任何日期,年份可以是2011-2015之间的任何内容,所以我试图找到一个通常可以解析Mon D [D]中的日期的表达式, YYYY格式.
这是一次尝试:
date <-str_extract_all(string=date, pattern='[A-Z][a-z]{3,4} ([0-9]{1,2}), [0-9]{4}')
Run Code Online (Sandbox Code Playgroud)
这产生了 character(0)
而另一个:
grep("[A-Z][a-z]{3,4} ([0-9]{1,2}), [0-9]{4}", date, value=TRUE)
Run Code Online (Sandbox Code Playgroud)
这也产生 character(0)
有小费吗?
我有数年有关个人的数据,但是他们的姓名每年的格式不同。名称中的一半已经按“ First Last”顺序排列,但是我不知道如何成功编辑另一半(“ Last,First”)。
这是样本df:
name <- c("First1 Last1","Last2, First2", "Last3, First3", "First4 Last4", "First5 Last5")
salary <-c(51000, 72000,125000,67000,155000)
year <-c(2012,2014,2013,2013,2014)
df <- data.frame(name, salary, year, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的方法:用逗号分隔文本:
df$name2 <- strsplit(df$name, ", ") #to split the character string by comma
df$name3 <-paste(df$name2, collapse=" ") #to collapse the newly created vectors back into a string
df$name4 <-paste(rev(df$name2)) #to try pasting each vector in reverse order
df$name5 <-paste(rev(df$name2)[2:1]) #trying again...
Run Code Online (Sandbox Code Playgroud)
我已经打印了正确的名称,但是倒退了,并且将它们打印在错误的行上,但是尽管进行了谷歌搜索,但我仍然无法正常工作。我究竟做错了什么?
也许这是一个愚蠢的问题,但玩子集我遇到了这个问题,我无法理解为什么会发生这种情况.例如,让我们考虑一个字符串,比方说"a",和一个整数,比如3,这个表达式返回的原因TRUE?
"a" >= 3
[1] TRUE
Run Code Online (Sandbox Code Playgroud) 我有一个看起来有点像这样的csv(为了便于阅读而添加了标签):
Dimension, Date, Metric
A, Mon, 23
A, Tues, 25
B, Mon, 7
B, Tues, 9
Run Code Online (Sandbox Code Playgroud)
我想进行一些距离+ hclust分析,这是我以前做过的.但我喜欢(也许需要)这种格式:
Dimension, Mon, Tues
A, 23, 25
B, 7, 9
Run Code Online (Sandbox Code Playgroud)
我可以使用数据透视表在Excel中轻松完成此操作.问题是我有~1,000个维度和〜1,200个日期 - 所以源CSV大约是12M行乘3列.我希望~1,000行〜1,200列.
有没有办法在R中做这个变换?一个小Python脚本的逻辑很简单,但我不确定它将如何处理如此大的CSV - 我无法想象这是一个新问题.不想重新发明轮子!
谢谢你的任何提示:)
我有一个包含100个问题的数据集(下面我有一个包含3个问题的子集).我想用"回答"数据集中提供的实际答案替换所有答案ID.最终结果显示在"结果"数据框中.
数据
name q1 q2 q3
1 a 1 3 7
2 a 8 3 1
3 a 3 9 2
4 b 4 4 3
Run Code Online (Sandbox Code Playgroud)
回答
id str
1 TRUE
2 FALSE
3 YES
4 NO
5 LESS
6 MORE
7 GREATER
8 LESS
9 NONE
10 DAILY
Run Code Online (Sandbox Code Playgroud)
结果
name q1 q2 q3
1 a TRUE YES GREATER
2 a LESS YES TRUE
3 a YES NONE FALSE
4 b NO NO YES
Run Code Online (Sandbox Code Playgroud)