Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在data.R表中具有不同间隔的findInterval()_R_Data.table_Intervals - Fatal编程技术网

在data.R表中具有不同间隔的findInterval()

在data.R表中具有不同间隔的findInterval(),r,data.table,intervals,R,Data.table,Intervals,我很久以前就问过这个问题,但还没有找到答案。我不知道这在stackoverflow中是否合法,但我重新发布了它 我在R中有一个data.table,我想创建一个新列,用于查找相应年份/月份的每个价格的区间 可复制示例: 我明白了 第一行正确,但最后一行(或其他)不正确。 例如,对于第3380行,价格~64.19应该在第5个区间,而不是第7个区间。我想我的错误是,根据上一个命令,查找间隔只依赖于intervalsstring的第一行 谢谢大家! 您的主要问题是您没有为每个组执行findInterv

我很久以前就问过这个问题,但还没有找到答案。我不知道这在stackoverflow中是否合法,但我重新发布了它

我在R中有一个data.table,我想创建一个新列,用于查找相应年份/月份的每个价格的区间

可复制示例:

我明白了

第一行正确,但最后一行(或其他)不正确。 例如,对于第3380行,价格~64.19应该在第5个区间,而不是第7个区间。我想我的错误是,根据上一个命令,查找间隔只依赖于
intervalsstring
的第一行


谢谢大家!

您的主要问题是您没有为每个组执行
findInterval
。但我也不认为有必要创建大型合并的
数据.table
,或
粘贴
/
strsplit
业务。这就是我要做的:

DT[, interval := findInterval(price,
                              intervals.dt[.BY][, V1:V10]),
     by = .(year, month)][]
#      year month     price interval
#   1: 2000     1 30.776611        2
#   2: 2000     1 62.499648        6
#   3: 2000     1 53.581115        6
#   4: 2000     1 48.830599        5
#   5: 2000     1 33.066053        2
#  ---                              
#3376: 2009    10 33.635924        1
#3377: 2009    10 38.993769        1
#3378: 2009    10 75.065820        7
#3379: 2009    10  6.277403        0
#3380: 2009    10 64.189162        5

请注意,
interval.dt[.BY]
是一个键控子集。

Nice
.BY
示例。添加到。您是否查看了
?data.table
,并确保理解每个参数?我只是简单地看了一下这个问题,我的第一个想法是想知道你是否知道
roll
哪个
,或者
foverlaps()
DT <- merge(DT, intervals.dt)
DT <- DT[, intervalsstring := paste(V1, V2, V3, V4, V5, V6, V7, V8, V9, V10)]
DT <- DT[, c("V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10") := NULL]
DT[, interval := findInterval(price, strsplit(intervalsstring, " ")[[1]])]
> DT
      year month     price               intervalsstring interval
   1: 2000     1 30.776611 12 21 36 46 48 51 63 72 91 95        2
   2: 2000     1 62.499648 12 21 36 46 48 51 63 72 91 95        6
   3: 2000     1 53.581115 12 21 36 46 48 51 63 72 91 95        6
   4: 2000     1 48.830599 12 21 36 46 48 51 63 72 91 95        5
   5: 2000     1 33.066053 12 21 36 46 48 51 63 72 91 95        2
---                                                            
3376: 2009    10 33.635924 12 40 45 48 50 65 75 90 96 97        2
3377: 2009    10 38.993769 12 40 45 48 50 65 75 90 96 97        3
3378: 2009    10 75.065820 12 40 45 48 50 65 75 90 96 97        8
3379: 2009    10  6.277403 12 40 45 48 50 65 75 90 96 97        0
3380: 2009    10 64.189162 12 40 45 48 50 65 75 90 96 97        7
DT[, interval := findInterval(price,
                              intervals.dt[.BY][, V1:V10]),
     by = .(year, month)][]
#      year month     price interval
#   1: 2000     1 30.776611        2
#   2: 2000     1 62.499648        6
#   3: 2000     1 53.581115        6
#   4: 2000     1 48.830599        5
#   5: 2000     1 33.066053        2
#  ---                              
#3376: 2009    10 33.635924        1
#3377: 2009    10 38.993769        1
#3378: 2009    10 75.065820        7
#3379: 2009    10  6.277403        0
#3380: 2009    10 64.189162        5