给定sortkey,是否有一个data.table快捷方式来复制SAS和SPSS中的功能first和last功能?
下面的行人方法标记了组的第一个记录.
鉴于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) 使用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) 目标是为数据框中的因子/字符串变量创建指标.那个数据帧有> 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) 我在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)