小编M.D*_*imo的帖子

使用data.table标记组中的第一个(或最后一个)记录

给定sortkey,是否有一个data.table快捷方式来复制SAS和SPSS中的功能firstlast功能?

下面的行人方法标记了组的第一个记录.

鉴于data.table(我正逐渐熟悉)的优雅,我假设有一个使用自联接的快捷方式mult,但我仍然试图弄明白.

这是一个例子:

require(data.table)

set.seed(123)
n <- 17
DT <- data.table(x=sample(letters[1:3],n,replace=T),
                 y=sample(LETTERS[1:3],n,replace=T))
sortkey  <- c("x","y")
setkeyv(DT,sortkey)
key <- paste(DT$x,DT$y,sep="-")
nw <- c( T , key[2:n]!=key[1:(n-1)] )
DT$first <- 1*nw
DT
Run Code Online (Sandbox Code Playgroud)

r data.table

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

data.tables和扫描功能

使用data.table,这是在一系列列中"扫出"统计数据的最快方法吗?

从(相当大的版本)DT开始

p <- 3
DT <- data.table(id=c("A","B","C"),x1=c(10,20,30),x2=c(20,30,10))
DT.totals <- DT[, list(id,total = x1+x2) ]
Run Code Online (Sandbox Code Playgroud)

我想通过索引目标列(2:p)来跳过密钥来获得以下data.table结果:

    id  x1  x2
[1,]    A   0.33    0.67
[2,]    B   0.40    0.60
[3,]    C   0.75    0.25
Run Code Online (Sandbox Code Playgroud)

r data.table

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

在大数据帧中生成指标

目标是为数据框中的因子/字符串变量创建指标.那个数据帧有> 2mm的行,并且在Windows上运行R,我没有选择使用plyr和.parallel = T. 所以我正在与plyr和reshape2一起采取"分而治之"的路线.

运行融化和强制转换耗尽内存,并使用

ddply( idata.frame(items) , c("ID") , function(x){
       (    colSums( model.matrix( ~ x$element - 1) ) > 0   )
} , .progress="text" )    
Run Code Online (Sandbox Code Playgroud)

要么

ddply( idata.frame(items) , c("ID") , function(x){
           (    elements %in% x$element   )
    } , .progress="text" )  
Run Code Online (Sandbox Code Playgroud)

确实需要一段时间.最快的方法是调用下面的tapply.你有没有办法加快速度?%in语句的运行速度比model.matrix调用快.谢谢.

set.seed(123)

dd <- data.frame(
  id  = sample( 1:5, size=10 , replace=T ) ,
  prd = letters[sample( 1:5, size=10 , replace=T )]
  )

prds <- unique(dd$prd)

tapply( dd$prd , dd$id , function(x) prds %in% x )
Run Code Online (Sandbox Code Playgroud)

memory r plyr dataframe reshape2

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

用newdata预测.lm

我在lm不使用data=参数的情况下构建了一个模型:

m1 <- lm( mdldvlp.trim$y ~  gc.pc$scores[,1] + gc.pc$scores[,2] + gc.pc$scores[,3] + 
                            gc.pc$scores[,4] + gc.pc$scores[,5] + gc.pc$scores[,6] + predict(gc.tA))
Run Code Online (Sandbox Code Playgroud)

现在我想预测m1使用newdata并命名我的新data.frame以匹配lm()上面调用中使用的变量.

随着newComps我的新gc.pc(与gc.tA预测一样,使用新的data.frame预测没有任何问题),我试过了

newD <- data.frame( newComps[1:100,1:6] ,
                    predict(gc.tA , newdata = mdldvlp[1:100,predKept]))


names(newD) <- names(m1$coefficients)[-1]
names(newD) <- names(m1$model)[-1]

names(newD) <- c( "gc.pc$scores[, 1]" , "gc.pc$scores[, 2]" , "gc.pc$scores[, 3]" , 
                  "gc.pc$scores[, 4]" , "gc.pc$scores[, 5]" , "gc.pc$scores[, 6]" , 
                  "predict(gc.tA)" )
names(newD) <- c( "gc.pc$scores[,1]" …
Run Code Online (Sandbox Code Playgroud)

r

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

标签 统计

r ×4

data.table ×2

dataframe ×1

memory ×1

plyr ×1

reshape2 ×1