标签: zoo

用最新的非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万
查看次数

将年和月("yyyy-mm"格式)转换为日期?

我有一个如下所示的数据集:

Month    count
2009-01  12
2009-02  310
2009-03  2379
2009-04  234
2009-05  14
2009-08  1
2009-09  34
2009-10  2386
Run Code Online (Sandbox Code Playgroud)

我想绘制数据(月份为x值,计为y值).由于数据存在差距,我想将月份信息转换为日期.我试过了:

as.Date("2009-03", "%Y-%m")
Run Code Online (Sandbox Code Playgroud)

但它没有用.怎么了?似乎as.Date()也需要一天,并且无法设置当天的标准值?哪个功能解决了我的问题?

posix r date zoo r-faq

84
推荐指数
6
解决办法
11万
查看次数

如何从data.table中排除一列或将data.table转换为MTS

使用data.table时可以返回除一个之外的所有列,例如data.frame

如果答案是否定的,是否有人有一种优雅的方式将多个时间序列转换data.table为一个zoo或其他时间序列对象?

请考虑以下示例:

library(data.table)
library(zoo)

## DEFINE DATA
set.seed(1)
dt = data.table(
    mydates = as.Date("2012-01-01") + 1:9, 
    value1 = sort(rpois(9, 6)),
    value2 = sort(rpois(9, 6)),
    value3 = sort(rpois(9, 6)),
    value4 = sort(rpois(9, 6)),
    value5 = sort(rpois(9, 6)))

## CONVERT TO DATA FRAME
df = as.data.frame(dt)

## CONVERT TO ZOO
zooObj = zoo(df[,-1], df$mydates)

## EXAMPLE OF DESIRED RESULTS
plot(zooObj, col=1:ncol(zooObj))
Run Code Online (Sandbox Code Playgroud)

没有我怎么办df = as.data.frame(dt)

r zoo data.table

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

即使在安装包之后,R也找不到包装

我一直在使用zoo我很久以前安装过的软件包.今天,我创建了一个新的R脚本,并运行library(zoo)并收到以下错误:

 > library(zoo)
 Error in library(zoo) : there is no package called ‘zoo’
Run Code Online (Sandbox Code Playgroud)

奇怪..但是,我尝试使用重新安装包install.packages("zoo"),并获得以下内容:

 > install.packages("zoo")
 Installing package(s) into ‘C:/Users/U122337.BOSTONADVISORS/Documents/R/win-library/2.15’
 (as ‘lib’ is unspecified)
 --- Please select a CRAN mirror for use in this session ---
 trying URL 'http://cran.cnr.Berkeley.edu/bin/windows/contrib/2.15/zoo_1.7-10.zip'
 Content type 'application/zip' length 874474 bytes (853 Kb)
 opened URL
 downloaded 853 Kb

 package ‘zoo’ successfully unpacked and MD5 sums checked
 Warning: cannot remove prior installation of package ‘zoo’

The downloaded binary packages are in …
Run Code Online (Sandbox Code Playgroud)

install r package zoo

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

R向量/数据帧中的基本滞后

很可能会暴露我是R的新手,但在SPSS中,运行滞后非常容易.显然这是用户错误,但我缺少什么?

x <- sample(c(1:9), 10, replace = T)
y <- lag(x, 1)
ds <- cbind(x, y)
ds
Run Code Online (Sandbox Code Playgroud)

结果是:

      x y
 [1,] 4 4
 [2,] 6 6
 [3,] 3 3
 [4,] 4 4
 [5,] 3 3
 [6,] 5 5
 [7,] 8 8
 [8,] 9 9
 [9,] 3 3
[10,] 7 7
Run Code Online (Sandbox Code Playgroud)

我想我会看到:

     x y
 [1,] 4 
 [2,] 6 4
 [3,] 3 6
 [4,] 4 3
 [5,] 3 4
 [6,] 5 3
 [7,] 8 5
 [8,] 9 8
 [9,] 3 9
[10,] …
Run Code Online (Sandbox Code Playgroud)

r time-series zoo xts

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

使用dplyr按组替换NA与上一个或下一个值

我有一个数据框,按日期的降序排列.

ps1 = data.frame(userID = c(21,21,21,22,22,22,23,23,23), 
             color = c(NA,'blue','red','blue',NA,NA,'red',NA,'gold'), 
             age = c('3yrs','2yrs',NA,NA,'3yrs',NA,NA,'4yrs',NA), 
             gender = c('F',NA,'M',NA,NA,'F','F',NA,'F') 
)
Run Code Online (Sandbox Code Playgroud)

我希望将NA值用先前的值归入(替换)并按userID分组如果userID的第一行有NA,则替换为该用户ID组的下一组值.

我正在尝试使用像这样的dplyr和zoo软件包......但它不起作用

cleanedFUG <- filteredUserGroup %>%
 group_by(UserID) %>%
 mutate(Age1 = na.locf(Age), 
     Color1 = na.locf(Color), 
     Gender1 = na.locf(Gender) ) 
Run Code Online (Sandbox Code Playgroud)

我需要结果df像这样:

                      userID color  age gender
                1     21  blue 3yrs      F
                2     21  blue 2yrs      F
                3     21   red 2yrs      M
                4     22  blue 3yrs      F
                5     22  blue 3yrs      F
                6     22  blue 3yrs      F
                7     23   red 4yrs      F
                8     23   red 4yrs      F
                9 …
Run Code Online (Sandbox Code Playgroud)

r missing-data zoo dplyr

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

通过基于时间的窗口优化不规则时间序列的滚动函数

是否有某种方式使用rollapply(从zoo包装或类似的东西)优化功能(rollmean,rollmedian等)来计算与基于时间窗口的滚动功能,而不是一个基于的若干意见?我想要的很简单:对于不规则时间序列中的每个元素,我想计算一个带有N天窗口的滚动函数.也就是说,窗口应包括当前观察前N天的所有观察结果.时间序列也可能包含重复项.

以下是一个例子.鉴于以下时间序列:

      date  value
 1/11/2011      5
 1/11/2011      4
 1/11/2011      2
 8/11/2011      1
13/11/2011      0
14/11/2011      0
15/11/2011      0
18/11/2011      1
21/11/2011      4
 5/12/2011      3
Run Code Online (Sandbox Code Playgroud)

具有5天窗口的滚动中位数(右侧对齐)应导致以下计算:

> c(
    median(c(5)),
    median(c(5,4)),
    median(c(5,4,2)),
    median(c(1)),
    median(c(1,0)), 
    median(c(0,0)),
    median(c(0,0,0)),
    median(c(0,0,0,1)),
    median(c(1,4)),
    median(c(3))
   )

 [1] 5.0 4.5 4.0 1.0 0.5 0.0 0.0 0.0 2.5 3.0
Run Code Online (Sandbox Code Playgroud)

我已经找到了一些解决方案,但它们通常很棘手,通常意味着很慢.我设法实现了自己的滚动函数计算.问题是,对于非常长的时间序列,中位数(rollmedian)的优化版本可以产生巨大的时间差,因为它考虑了窗口之间的重叠.我想避免重新实现它.我怀疑rollapply参数有一些技巧可以使它工作,但我无法弄明白.在此先感谢您的帮助.

r time-series zoo

26
推荐指数
3
解决办法
2605
查看次数

访问zoo或xts索引

我正在使用zoo对象,买我的问题也适用于xts对象.它看起来像是一个带有索引的单列向量.在我的例子中,索引是日期的向量,而一列向量是我的数据.一切都很好,除了我想访问日期(从索引).

例如,我有以下结果:

ObjZoo <- structure(c(10, 20), .Dim = c(2L, 1L), index = c(14788, 14789),
                    class = "zoo", .Dimnames = list(NULL, "Data"))
unclass(ObjZoo)
#      Data
# [1,]   10
# [2,]   20
# attr(,"index")
# [1] 14788 14789
Run Code Online (Sandbox Code Playgroud)

我想进入14789变量或向量,但我不知道如何访问它.

r zoo xts

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

R:填写时间序列中缺少的日期?

我有一个动物园时间序列,错过了几天.为了填补它并有一个连续的系列我做...

我从头到尾生成一个chron日期时间序列.

我把我的系列与这个合并.

我使用na.locf代替具有las遮挡的NAs.

我删除了syntetic chron序列.

我可以更容易吗?也许有一些与频率相关的指数函数?

r time-series fill zoo

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

自适应移动平均 - R中的最佳性能

我正在寻找R中滚动/滑动窗口函数方面的一些性能提升.这是一个非常常见的任务,可用于任何有序的观测数据集.我想分享一些我的发现,也许有人能够提供反馈,使其更快.
重要的是我专注于案例align="right"和自适应滚动窗口,因此width是一个向量(与我们的观察向量相同的长度).如果我们有width标量,那么已经有非常好的函数zooTTR包非常难以击败(4年后:它比我预期的要容易),因为其中一些甚至使用Fortran(但仍然是用户定义的)使用下面提到的FUN可以更快wapply.
RcppRoll由于其出色的性能,包值得值得一提,但到目前为止还没有能够回答这个问题的功能.如果有人可以扩展它以回答这个问题,那将会很棒.

考虑一下我们有以下数据:

x = c(120,105,118,140,142,141,135,152,154,138,125,132,131,120)
plot(x, type="l")
Run Code Online (Sandbox Code Playgroud)

大块make_x的情节

我们希望在x带有可变滚动窗口的矢量上应用滚动函数width.

set.seed(1)
width = sample(2:4,length(x),TRUE)
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,我们将不得不滚动功能适应samplec(2,3,4).
我们将应用mean功能,预期结果:

r = f(x, width, FUN = mean)
print(r)
##  [1]       NA       NA 114.3333 120.7500 141.0000 135.2500 139.5000
##  [8] 142.6667 147.0000 146.0000 131.5000 128.5000 131.5000 127.6667
plot(x, type="l")
lines(r, col="red")
Run Code Online (Sandbox Code Playgroud)

大块make_results的情节

任何指标都可用于产生自width变量作为自适应移动平均线的不同变体或任何其他函数.

寻找最佳表现.

r zoo mapply rollapply data.table

16
推荐指数
3
解决办法
5555
查看次数

标签 统计

r ×10

zoo ×10

data.table ×3

time-series ×3

r-faq ×2

xts ×2

date ×1

dplyr ×1

fill ×1

install ×1

mapply ×1

missing-data ×1

package ×1

posix ×1

rollapply ×1