从排序数据框中将最近的值绘制到未排序的数据框中

Mic*_*lle 3 r matching cumulative-frequency

我有两个数据帧R.第一个数据帧是cumFreqDist具有相关周期的累积频率分布().数据框的第一行如下所示:

Time        cumfreq
0         0.0000000
4         0.9009009
6         1.8018018
8         7.5075075
12       23.4234234
16       39.6396396
18       53.4534535
20       58.2582583
24       75.3753754
100     100.0000000
Run Code Online (Sandbox Code Playgroud)

第二个数据框是来自runif分布的10000个绘图,使用以下代码:

 testData <- (runif(10000))*100
Run Code Online (Sandbox Code Playgroud)

对于每一行testData,我想找到相应的cumfreqin cumFreqDist并将相应的Time值添加到一个新列中testData.因为testData是一个真实数据框的测试数据框,我不想排序testData.

因为我处理的累积频率,如果该testData23.30...Time应返回的值8.也就是说,我需要找到cumfreq不超过该testData值的最近值,并仅返回该值.

data.table软件包已被提及用于其他类似问题,但我的有限理解是该软件包需要在两个数据框中识别密钥(在转换为数据表之后)并且我不能假设这些testData值满足分配的要求作为一个键 - 似乎分配一个键将对数据进行排序.当我在我正在做的进一步工作中设置种子时,这将导致我的问题.

bgo*_*dst 5

findInterval() 这是完美的:

set.seed(1);
cumFreqDist <- data.frame(Time=c(0,4,6,8,12,16,18,20,24,100), cumfreq=c(0.0000000,0.9009009,1.8018018,7.5075075,23.4234234,39.6396396,53.4534535,58.2582583,75.3753754,100.0000000) );
testData <- data.frame(x=runif(10000)*100);
testData$Time <- cumFreqDist$Time[findInterval(testData$x,cumFreqDist$cumfreq)];
head(testData,20);
##            x Time
## 1  26.550866   12
## 2  37.212390   12
## 3  57.285336   18
## 4  90.820779   24
## 5  20.168193    8
## 6  89.838968   24
## 7  94.467527   24
## 8  66.079779   20
## 9  62.911404   20
## 10  6.178627    6
## 11 20.597457    8
## 12 17.655675    8
## 13 68.702285   20
## 14 38.410372   12
## 15 76.984142   24
## 16 49.769924   16
## 17 71.761851   20
## 18 99.190609   24
## 19 38.003518   12
## 20 77.744522   24
Run Code Online (Sandbox Code Playgroud)