私はタイムスタンプを含むdata.tableオブジェクトを持っています(真夜中の後に秒として測定)。私の目的は、観測前に最大$ k $秒で発生した観測数を各行に対して返す関数を実行することです。私はそれぞれの行に適用する突然変異内で関数を適用
require(data.table, dplyr, dtplyr)
set.seed(123)
DF <- data.frame(Secs=cumsum(rexp(10000,1)))
setDT(DF)
> DF
Secs
1: 8.434573e-01
2: 1.420068e+00
3: 2.749122e+00
4: 2.780700e+00
5: 2.836911e+00
---
9996: 1.003014e+04
9997: 1.003382e+04
9998: 1.003384e+04
9999: 1.003414e+04
10000: 1.003781e+04
機能は、私が欲しいものを得るために
nS<-function(Second,k=5)
max(1,nrow(DF%>%filter(Secs<Second & Secs>=Second-k)))
一つの方法は、かなり時間がかかりれ、適用使用することです。
system.time(val <- apply(DF,1,nS))
User System verstrichen
20.56 0.03 20.66
#Not working
DF%>%mutate(nS=nS(Secs,100))%>%head()
# Also not working
library(lazyeval)
f = function(col1, new_col_name) {
mutate_call = lazyeval::interp(~ nS(a), a = as.name(col1))
DF%>%mutate_(.dots=setNames(list(mutate_call),new_col_name))
}
head(f('Secs', 'nS'))
DF%>%mutate(minTime=Secs-k)%>%head()
mutateを使用してこのアプローチを行うことはできませんか? ご協力いただきありがとうございます!
うわー、おかげで多くのことを、これは素晴らしいです! – muffin1974