小编Mik*_*han的帖子

通过变量列表执行滚动求和的优雅,快速方法

有没有人开发出一种优雅,快速的方式来按日期执行滚动总和?例如,如果我想通过Cust_ID为以下数据集创建一个180天的滚动总计,有没有办法更快地完成它(比如data.table中的某些内容).我一直在使用以下示例来计算滚动总和,但恐怕效率低得多.

library("zoo")
library("plyr")
library("lubridate")

##Make some sample variables
set.seed(1)
Trans_Dates <- as.Date(c(31,33,65,96,150,187,210,212,240,273,293,320,
                         32,34,66,97,151,188,211,213,241,274,294,321,
                         33,35,67,98,152,189,212,214,242,275,295,322),origin="2010-01-01")
Cust_ID <- c(rep(1,12),rep(2,12),rep(3,12))
Target <- rpois(36,3)

##Combine into one dataset
Example.Data <- data.frame(Trans_Dates,Cust_ID,Target)

##Create extra variable with 180 day rolling sum
Example.Data2 <- ddply(Example.Data, .(Cust_ID), 
  function(datc) adply(datc, 1, 
   function(x) data.frame(Target_Running_Total =
    sum(subset(datc, Trans_Dates>(as.Date(x$Trans_Dates)-180) & Trans_Dates<=x$Trans_Dates)$Target))))

#Print new data
Example.Data2 
Run Code Online (Sandbox Code Playgroud)

variables r plyr data.table

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

在data.table包中使用.BY和.EACHI

我试图更好地掌握data.table包中的一些特殊变量是如何工作的.其中之一就是.BY声明.我没有看到很多人使用它的例子,但是文档暗示在绘图中很有用.

例如,下面的代码似乎工作得很好(显示每个物种的图,并为每个图分配正确的标题)data.table 1.9.3:

iris <- data.table(iris)
iris[,plot(Sepal.Length ~ Sepal.Width, main = unlist(.BY)), by = Species]
Run Code Online (Sandbox Code Playgroud)

虽然此代码不符合我的意图:

iris[ , plot(Sepal.Length ~ Sepal.Width, main = .BY), by = Species]
Run Code Online (Sandbox Code Playgroud)

为什么这两个不同?从评论来看,它似乎不是一个问题data.table 1.9.2.在其他方面使用该.BY声明可能有用吗?与.EACHI声明相比,这有何不同?

r data.table

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

使用data.table的长度不同的fread来获取空白缺失值

我有一个缺少许多值的数据集。一些缺失值是NA,一些缺失值是Null,而其他缺失值的长度却有所不同。我想利用该fread函数R来读取所有这些缺少的值。

这是一个例子:

#Find fake data
iris <- data.table(iris)[1:5]

#Add missing values non-uniformly
iris[1,Species:='         ']
iris[2,Species:=' ']
iris[3,Species:='NULL']

#Write to csv and read back in using fread
write.csv(iris,file="iris.csv")
fread("iris.csv",na.strings=c("NULL"," "))

   V1 Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1:  1          5.1         3.5          1.4         0.2          
2:  2          4.9         3.0          1.4         0.2        NA
3:  3          4.7         3.2          1.3         0.2        NA
4:  4          4.6         3.1          1.5         0.2    setosa
5:  5          5.0         3.6          1.4         0.2    setosa
Run Code Online (Sandbox Code Playgroud)

从上面的示例中,我们看到我无法解决第一个缺失值,因为有很多空格。有人知道一种解决方法吗?

r data.table

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

从密度对象中提取概率

我目前正在为我正在进行的生态项目构建密度对象.该density函数R非常适合将密度函数拟合到我的数据中.

我如何使用该density功能的示例如下所示:

dens.iris <- density(iris$Sepal.Length, bw = "bcv")
Run Code Online (Sandbox Code Playgroud)

这非常有效.但是,该predict功能似乎不适用于density对象.有没有人知道一种方法来提取特定点的密度值(例如在iris数据集中,提取Sepal.Length为6.432)?我必须使用一种biased cross validation技术.

r

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

在另一列中按滞后值移动行值

我有一个相当大的数据集,我有兴趣根据另一列的值向前推进"行进"值.例如,如果我有一个Value = 3at Time = 0和a DesiredShift = 2,我希望3将两行向下移动到Time = 2.这是一个可重复的例子.

构建可重现的伪数据

library(data.table)
set.seed(1)
rowsPerID <- 8
dat <- CJ(1:2, 1:rowsPerID)
setnames(dat, c("ID","Time"))
dat[, Value := rpois(.N, 4)]
dat[, Shift := sample(0:2, size=.N, replace=TRUE)]
Run Code Online (Sandbox Code Playgroud)

假数据

#     ID Time Value Shift
#  1:  1    1     3     2
#  2:  1    2     3     2
#  3:  1    3     4     1
#  4:  1    4     7     2
#  5:  1    5     2     2
#  6:  1    6 …
Run Code Online (Sandbox Code Playgroud)

performance r data.table

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

将变量列表转换为data.table对象

是否有更优雅的方法将变量列表转换为data.table对象?

这不会产生预期的结果.

require(data.table)
set.seed(1)
Var.List <- list(a=sample(letters, 10, rep=T),b=rnorm(10), c=rnorm(10))
data.table(Var.List)
Run Code Online (Sandbox Code Playgroud)

以下确实给出了期望的结果,但是对于大列表/表格来说速度很慢.有没有更好的办法?在汇总来自foreach包的结果时,我经常遇到这个问题.

data.table(as.data.frame(Var.List))

    a          b           c
 1: g -0.8204684 -0.04493361
 2: j  0.4874291 -0.01619026
 3: o  0.7383247  0.94383621
 4: x  0.5757814  0.82122120
 5: f -0.3053884  0.59390132
 6: x  1.5117812  0.91897737
 7: y  0.3898432  0.78213630
 8: r -0.6212406  0.07456498
 9: q -2.2146999 -1.98935170
10: b  1.1249309  0.61982575
Run Code Online (Sandbox Code Playgroud)

r data.table

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

如果不存在分隔符,则在R中分隔字段

我有一个如下数据集:

structure(list(Info = c("Acacia melanoceras 0.0369 0.0427 0.0267 0.0298 0.0501 0.0042 ", 
"Acalypha diversifolia van 0.0670 0.0439 0.0281 0.0427 0.0464 -0.0148 ", 
"Acalypha macrostachya vin 0.0657 0.0621 0.0441 0.0522 0.0473 -0.0173 ", 
"Adelia triloba 0.0481 0.0350 0.0202 0.0174 0.0286 -0.0349 ", 
"Aegiphila panamensis 0.0437 0.0312 0.0166 0.0148 0.0194 -0.0497 ", 
"Alchornea costaricensis 0.0568 0.0781 0.0502 0.0221 0.0734 -0.0153 "
)), .Names = "Info", row.names = c(NA, 6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

它目前只有一列,看起来像这样

                                                                   Info
1         Acacia melanoceras 0.0369 0.0427 0.0267 0.0298 0.0501 …
Run Code Online (Sandbox Code Playgroud)

r

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

标签 统计

r ×7

data.table ×5

performance ×1

plyr ×1

variables ×1