小编Sab*_*DeM的帖子

使用包data.table中的fread一次读取块

我正在尝试使用fread包中的函数输入一个大的制表符分隔文件(大约2GB)data.table.但是,因为它太大了,所以它并不完全适合内存.我试图通过使用skipnrow参数来输入它,例如:

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万行,然后继续阅读从那一点开始而不必重新开始?任何解决方案,还是应该是新功能请求?

r fread data.table

26
推荐指数
4
解决办法
5546
查看次数

stargazer左对齐LaTeX表列

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)

latex r knitr stargazer

21
推荐指数
1
解决办法
4148
查看次数

在knitr中,for循环中的pander没有输出

在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)

r rstudio knitr pander

8
推荐指数
1
解决办法
1857
查看次数

R读缩写月份形成一个非英语的日期

我有一个包含日期的文本文件,并希望将其转换为数据表.

转换03-FEB-2011等日期可以完成

data$fecha <- as.Date(data$textDate , "%d-%b-%Y")
Run Code Online (Sandbox Code Playgroud)

问题是这个专栏是西班牙语,所以我不会得到Jan但是Ene,或者8月而是Ago.如何更改语言环境,以便%b缩写适用于西班牙语?有没有其他方法来实现这一目标?

r date as.date

6
推荐指数
2
解决办法
3918
查看次数

R轴未显示

从字面上看,我恐怕失去了阴谋!为什么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)

plot r scatter-plot

5
推荐指数
1
解决办法
8614
查看次数

使用R中的RegEx以Mon,DD,YYYY格式解析日期

我试图从一串文本中解析一个日期.我假设最好的方法是使用正则表达式,但我还没有找到一个有效的解决方案.

首先,我使用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)

有小费吗?

regex grep parsing r date

5
推荐指数
2
解决办法
3931
查看次数

在R中用逗号分割和重新排序字符串

我有数年有关个人的数据,但是他们的姓名每年的格式不同。名称中的一半已经按“ 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)

我已经打印了正确的名称,但是倒退了,并且将它们打印在错误的行上,但是尽管进行了谷歌搜索,但我仍然无法正常工作。我究竟做错了什么?

r strsplit dataframe

4
推荐指数
1
解决办法
441
查看次数

为什么"<some string>"> = <a number>为真?

也许这是一个愚蠢的问题,但玩子集我遇到了这个问题,我无法理解为什么会发生这种情况.例如,让我们考虑一个字符串,比方说"a",和一个整数,比如3,这个表达式返回的原因TRUE

"a" >= 3
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
99
查看次数

透视大型数据集

我有一个看起来有点像这样的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 - 我无法想象这是一个新问题.不想重新发明轮子!

谢谢你的任何提示:)

pivot pivot-table r

3
推荐指数
1
解决办法
476
查看次数

R使用关键数据框替换多列的键

我有一个包含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)

r key match

2
推荐指数
1
解决办法
130
查看次数