小编Ryo*_*ogi的帖子

用最新的非NA值替换NA

在data.frame(或data.table)中,我想用最近的非NA值"填充"NA.一个简单的例子,使用向量(而不是a data.frame)如下:

> y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA)
Run Code Online (Sandbox Code Playgroud)

我想要一个fill.NAs()允许我构造的函数yy:

> yy
[1] NA NA NA  2  2  2  2  3  3  3  4  4
Run Code Online (Sandbox Code Playgroud)

我需要对许多(总计~1 Tb)小尺寸data.frames(~30-50 Mb)重复此操作,其中一行是NA,其所有条目都是.解决问题的好方法是什么?

我做的丑陋的解决方案使用这个功能:

last <- function (x){
    x[length(x)]
}    

fill.NAs <- function(isNA){
if (isNA[1] == 1) {
    isNA[1:max({which(isNA==0)[1]-1},1)] <- 0 # first is NAs 
                                              # can't be forward filled
}
isNA.neg <- isNA.pos <- isNA.diff <- diff(isNA)
isNA.pos[isNA.diff < 0] <- …
Run Code Online (Sandbox Code Playgroud)

r zoo r-faq data.table

129
推荐指数
11
解决办法
7万
查看次数

data.table上有效的逐行操作

我需要找到行数最小的(+60)
相对较大data.frame(~250,000 x 3)(或者我可以等效地工作xts).

set.seed(1000)
my.df <- sample(1:5, 250000*3, replace=TRUE)
dim(my.df) <- c(250000,3)
my.df <- as.data.frame(my.df)
names(my.df) <- c("A", "B", "C")
Run Code Online (Sandbox Code Playgroud)

数据框my.df看起来像这样

> head(my.df)

  A B C
1 2 5 2
2 4 5 5
3 1 5 3
4 4 4 3
5 3 5 5
6 1 5 3
Run Code Online (Sandbox Code Playgroud)

我试过了

require(data.table)
my.dt <- as.data.table(my.df)

my.dt[, row.min:=0]  # without this: "Attempt to add new column(s) and set subset of rows at the same …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

与data.tables的非连接

我有一个关于data.table"非连接"成语的问题,灵感来自Iterator的问题.这是一个例子:

library(data.table)

dt1 <- data.table(A1=letters[1:10], B1=sample(1:5,10, replace=TRUE))
dt2 <- data.table(A2=letters[c(1:5, 11:15)], B2=sample(1:5,10, replace=TRUE))

setkey(dt1, A1)
setkey(dt2, A2)
Run Code Online (Sandbox Code Playgroud)

data.table看起来像这样

> dt1               > dt2
      A1 B1               A2 B2
 [1,]  a  1          [1,]  a  2
 [2,]  b  4          [2,]  b  5
 [3,]  c  2          [3,]  c  2
 [4,]  d  5          [4,]  d  1
 [5,]  e  1          [5,]  e  1
 [6,]  f  2          [6,]  k  5
 [7,]  g  3          [7,]  l  2
 [8,]  h  3          [8,] …
Run Code Online (Sandbox Code Playgroud)

r data.table

14
推荐指数
2
解决办法
1688
查看次数

if-else vs ifelse with lists

为什么if-else结构和函数ifelse()的行为不同?

mylist <- list(list(a=1, b=2), list(x=10, y=20))

l1 <- ifelse(sum(sapply(mylist, class) != "list")==0, mylist, list(mylist))

l2 <-
if(sum(sapply(mylist, class) != "list") == 0){  # T: all list elements are lists
  mylist
} else {
  list(mylist)
}

all.equal(l1,l2)
#  [1] "Length mismatch: comparison on first 1 components"
Run Code Online (Sandbox Code Playgroud)

if-statement r

11
推荐指数
2
解决办法
9974
查看次数

mmap和csv文件

我试图了解如何使用该包mmap 访问大型csv文件.更准确地说,我想

  1. mmapcsv文件创建一个对象mmap.csv();
  2. 保存通过mmap.csv()包含二进制格式的数据创建的文件;
  3. 能够使用该功能"将二进制数据映射回R" mmap().

实现1.和2.很简单:只需使用mmap.cv()并保存tempfile() 包含二进制数据的内容,或修改mmap.cv()为接受额外参数作为输出文件(并相应地修改行tmpstruct <- tempfile()).我遇到的麻烦是3.特别是,我需要为来自mmap对象的二进制数据中的记录构造一个C-struct .这是一个简单的可重现的例子:

# create mmap object with its file
library(mmap)
data(cars)

m <- as.mmap(cars, file="cars.Rmap")
colnames(m) <- colnames(cars)
str(m) 
munmap(m)
Run Code Online (Sandbox Code Playgroud)

来自的信息str()可用于构造record.struct允许cars.Rmap 通过函数mmap 映射二进制文件的C结构 .

> str(m)
<mmap:temp.Rmap>  (struct) struct [1:50, 1:2] 4 ...
  data         :<externalptr> 
  bytes        : num 400
  filedesc     : Named int 27
 - attr(*, "names")= chr …
Run Code Online (Sandbox Code Playgroud)

mmap r

10
推荐指数
1
解决办法
1797
查看次数

sqldf:将时间戳从本地时间更改为GMT/UTC

在我的机器上,sqldf将POSIXct从本地时间(我在CST,GMT -0600)更改为GMT/UTC.这是预期的行为吗?我可以阻止R或sqldf这样做吗?这是我的代码:

> library('sqldf')
> 
> before <- data.frame(ct_sys = Sys.time())
> before
               ct_sys
1 2012-03-01 12:57:58
> after <- sqldf('select * from before')
> after
               ct_sys
1 2012-03-01 18:57:58
> 
Run Code Online (Sandbox Code Playgroud)

r sqldf

9
推荐指数
1
解决办法
640
查看次数

使用j环境中的函数进行列选择

请考虑以下列中的列选择data.table:

library(data.table) # using 1.8.7 from r-forge
dt <- data.table(a = 1:5, b = i <- rnorm(5), c = pnorm(i))
dt[, list(a,b)]  #ok
Run Code Online (Sandbox Code Playgroud)

为了在具有许多和可变列的某些计算中简化我的代码,我想list(a,b)用函数替换.这是第一次尝试:

.ab <- function()  quote(list(a, b))
dt[, eval(.ab())] #ok - same as above
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想摆脱eval()来自[.data.table呼叫,它限制在定义.ab的同时避免将数据表,而dt该函数.ab.

.eab <- function()  eval(quote(list(a, b)))
dt[, .eab()] 
# Error in eval(expr, envir, enclos) : object 'b' not found
Run Code Online (Sandbox Code Playgroud)

发生了什么?怎么解决这个问题?

我怀疑是什么让我感到愤怒的是R的词汇范围以及正确的评估list(a,b)依赖于它在数据表的J环境中dt.唉,我不知道如何获取对正确环境的引用,并将其用作envirenclos …

r data.table

9
推荐指数
2
解决办法
236
查看次数

掩盖冲突

加载.csvsqldf,一切都很顺利,直到我加载data.table.例如:

library(sqldf)
write.table(trees, file="trees.csv", row.names=FALSE, col.names=FALSE, sep=",")
my.df <- read.csv.sql("trees.csv", "select * from file", 
        header = FALSE, row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

工作,而

library(data.table)
my.df <- read.csv.sql("trees.csv", "select * from file", 
        header = FALSE, row.names = FALSE)
# Error in list(...)[[1]] : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

不.加载后,data.table通知您

The following object(s) are masked from 'package:base':

   cbind, rbind
Run Code Online (Sandbox Code Playgroud)

所以,我试过这个

rbind <- base::rbind  # `unmask` rbind from base::
library(data.table)
my.df <- read.csv.sql("trees.csv", "select * from file", 
        header …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
1
解决办法
1246
查看次数

毫秒时间戳作为data.table中的键

在这个问题data.table中讨论了在s 中使用日期的问题.解决方案是使用内置类来表示时间和日期.这些工作精度高达秒.在索引列中是否有处理毫秒的解决方法?

datetime r data.table

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

与R中的data.table聚合

练习包括通过因子的组合和R中的data.table来聚合值的数值向量.以下面的数据表为例:

require (data.table)
require (plyr)
dtb <- data.table (cbind (expand.grid (month = rep (month.abb[1:3], each = 3),
                                       fac = letters[1:3]),
                          value = rnorm (27)))
Run Code Online (Sandbox Code Playgroud)

请注意,'month'和'fac'的每个独特组合都会出现三次.因此,当我尝试通过这两个因素平均值时,我应该期望一个包含9个唯一行的数据框:

(agg1 <- ddply (dtb, c ("month", "fac"), function (dfr) mean (dfr$value)))
  month fac          V1
1   Jan   a -0.36030953
2   Jan   b -0.58444588
3   Jan   c -0.15472876
4   Feb   a -0.05674483
5   Feb   b  0.26415972
6   Feb   c -1.62346772
7   Mar   a  0.24560510
8   Mar   b  0.82548140
9   Mar   c  0.18721114
Run Code Online (Sandbox Code Playgroud)

但是,当与data.table聚合时,我会不断得到两个因素的每个冗余组合提供的结果:

(agg2 <- dtb[, value …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

是否有一种简单的方法可以使用RSQLite和`sqldf`以及超过999个变量?

有一种简单的方法可以使用RSQLite并且sqldf有超过999个变量吗?

这个问题也在这里提出.关于R-sig-DB的答案

"这不起作用的原因似乎是sqlite源码中的SQLITE_MAX_VARIABLE_NUMBER(在RSQLite中)目前设置为999."

以下是一些示例代码:

# works fine
widedf <- rnorm(2*998)
dim(widedf) <- c(2, 998)
f2 <- tempfile()
write.csv(widedf, f2, quote = FALSE)

f2 <- file(f2)
widedf <- sqldf("select * from f2", 
                dbname = tempfile(), 
                file.format = list(header = T, row.names = F))

# doesn't work
widedf <- rnorm(2*1000)
dim(widedf) <- c(2, 1000)
f1 <- tempfile()
write.csv(widedf, f1, quote = FALSE)

f1 <- file(f1)
widedf <- sqldf("select * from f1", 
                dbname = tempfile(), 
                file.format = …
Run Code Online (Sandbox Code Playgroud)

sqlite r

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

将代码包装在模块中

以下代码无缝执行

wave = HaarWavelet[];
type = "PrimalLowpass";

h = WaveletFilterCoefficients[
  wave, type, 
  WorkingPrecision -> \[Infinity]
];

h = Flatten[
    Take[h, 
        Range[1, Length[h]], 
        Table[2, {Length[h]}]
        ]
    ]
Run Code Online (Sandbox Code Playgroud)

但是当它包裹在一起时Module会出错.考虑这个功能

    getWaveletFilter[wave_, type_]:=
    Module[{filter}, (* treated as local *)
      filter = WaveletFilterCoefficients[
        wave, type, WorkingPrecision -> \[Infinity]
      ]

      filter = Flatten[
          Take[filter, 
              Range[1, Length[filter]], 
              Table[2, {Length[filter]}]
              ]
          ]

      filter
    ]
Run Code Online (Sandbox Code Playgroud)

我想getWaveletFilter[HaarWavelet[], "PrimalHighpass"] 回来

{1/2, -1/2}
Run Code Online (Sandbox Code Playgroud)

相反,Mathematica有各种各样的抱怨.有什么建议吗?

wolfram-mathematica

0
推荐指数
1
解决办法
114
查看次数

标签 统计

r ×11

data.table ×7

datetime ×1

if-statement ×1

mmap ×1

r-faq ×1

sqldf ×1

sqlite ×1

wolfram-mathematica ×1

zoo ×1