小编roa*_*dom的帖子

根据其他列的条件拉取数据帧行的子集

我有dataframe一个如下:

x <- data.table(Tickers=c("A","A","A","B","B","B","B","D","D","D","D"),
                Type=c("put","call","put","call","call","put","call","put","call","put","call"),
                Strike=c(35,37.5,37.5,10,11,11,12,40,40,42,42),
                Other=sample(20,11))

    Tickers Type Strike Other
 1:       A  put   35.0     6
 2:       A call   37.5     5
 3:       A  put   37.5    13
 4:       B call   10.0    15
 5:       B call   11.0    12
 6:       B  put   11.0     4
 7:       B call   12.0    20
 8:       D  put   40.0     7
 9:       D call   40.0    11
10:       D  put   42.0    10
11:       D call   42.0     1
Run Code Online (Sandbox Code Playgroud)

我正在尝试分析数据的一个子集.我想要的子集是数据,其中tickerstrike是相同的.但是,如果a put和a都call存在,我也只想获取这些数据type.以上面的数据为例,我想返回以下结果:

x[c(2,3,5,6,8:11),] …
Run Code Online (Sandbox Code Playgroud)

datatable r subset dataframe

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

如何使用该子集提取前n行并计算每组的函数,然后通过不同的组计算平均值?

这是我之前的问题的后续问题: 如何提取每组前n行并使用该子集计算函数?

另一篇相关文章:如何提取每组前n行?

我有以下数据:

set.seed(1)
dt1 <- data.table(ticker="aa",letters=sample(LETTERS,10^6,T),x=rnorm(2000,100,10),y=rnorm(2000,80,20))
dt2 <- data.table(ticker="aapl",letters=sample(LETTERS,10^6,T),x=rnorm(2000,100,10),y=rnorm(2000,80,20))
dt3 <- data.table(ticker="abc",letters=sample(LETTERS,10^6,T),x=rnorm(2000,100,10),y=rnorm(2000,80,20))
myList <- list(dt1,dt2,dt3)
Run Code Online (Sandbox Code Playgroud)

我想在一个特定的索引上按函数输出取决于子集化的数据帧,对这个数据应用一个函数.然后,我想用不同的分组变量对结果data.table进行分组,并采用简单的方法.

我想首先通过group1在子集化行上计算我的函数,rbindlist结果,然后通过group2计算平均值?

或者我想首先对我的整个数据进行rbindlist,预先选择子集行,然后通过group1计算我的函数然后按group2计算均值?

# data.table version of function
dt_calc_perf <- function(dt){
  buy <- ifelse(dt$x > mean(dt$y),1,0)
  dt$perf <- buy*(dt$x/dt$y-1)
  return(dt)
}
# vector return version of function
calc_perf <- function(dt){
  buy <- ifelse(dt$x > mean(dt$y),1,0)
  perf <- buy*(dt$x/dt$y-1)
  return(perf)
}

# which is faster?

# method 1
method1 <- function(){
  res1 <- rbindlist(lapply(1:length(myList), 
                           function(m) dt_calc_perf(myList[[m]][1:1000])))
  res1 <- res1[,list('perf'=mean(perf),'tickers'=paste(ticker,collapse=',')),
               by=letters]
}

# method …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

如何使用警告对data.table中的组进行采样

这个问题非常类似于如何在data.table中对每个组中的随机行进行采样?.

差异在于一个微小的微妙之处,我没有足够的声誉来讨论这个问题本身.

让我们稍微改变一下Christopher Manning的初始数据:

> DT = data.table(a=c(1,1,1,1:15,1,1), b=sample(1:1000,20))
> DT
     a   b
 1:  1 102
 2:  1   5
 3:  1 658
 4:  1 499
 5:  2 632
 6:  3 186
 7:  4 761
 8:  5 150
 9:  6 423
10:  7 832
11:  8 883
12:  9 247
13: 10 894
14: 11 141
15: 12 891
16: 13 488
17: 14 101
18: 15 677
19:  1 400
20:  1 467
Run Code Online (Sandbox Code Playgroud)

如果我们尝试了问题的解决方案:

> DT[,.SD[sample(.N,3)],by = a] …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

将数据帧拆分为更小的块

假设我有以下内容 data.frame

> df <- data.frame(a=rep(1:3),b=rep(1:3),c=rep(4:6),d=rep(4:6))
> df
  a b c d
1 1 1 4 4
2 2 2 5 5
3 3 3 6 6
Run Code Online (Sandbox Code Playgroud)

我希望能够将其拆分df为两个框架df1df2. 我想df1是的前两列dfdf2是的两列df。有没有办法在代码中做到这一点,这样我就不必手动执行以下操作:

> df1 <- df[,1:2]
> df1
  a b
1 1 1
2 2 2
3 3 3
> df2 <- df[,3:4]
> df2
  c d
1 4 4
2 5 5
3 6 6
Run Code Online (Sandbox Code Playgroud)

这会很好,因为我正在处理的问题有可变数量的列,我只想能够创建n = …

split r dataframe

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

如何提取每个组的前n行并使用该子集计算函数?

我的问题与这个问题非常相似: 如何提取每个组的前n行?

dt
         date age     name       val
1: 2000-01-01   3   Andrew  93.73546
2: 2000-01-01   4      Ben 101.83643
3: 2000-01-01   5  Charlie  91.64371
4: 2000-01-02   6     Adam 115.95281
5: 2000-01-02   7      Bob 103.29508
6: 2000-01-02   8 Campbell  91.79532
Run Code Online (Sandbox Code Playgroud)

我们有一个dt,我添加了一个名为的额外列val。首先,我们要提取每个组中的前n行。提供的链接中的解决方案是:

dt[, .SD[1:2], by=date] # where 1:2 is the index needed
dt[dt[, .I[1:2], by = date]$V1] # for speed
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果该函数取决于子集信息,那么该如何将函数应用于每个组的前n行。我正在尝试应用这样的事情:

  # uses other columns for results/ is dependent on subsetted rows
  # but keep it simple for replication
do_something …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

标签 统计

r ×5

data.table ×3

dataframe ×2

datatable ×1

split ×1

subset ×1