r - 将已排序数据框中的最近值绘制到未排序数据框中

标签 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

第二个数据框是从 runif 分布中提取的 10000 次,使用代码:

 testData <- (runif(10000))*100

对于 testData 中的每一行,我想在 cumFreqDist 中找到相应的 cumfreq 并添加相应的 Time 将值放入 testData 中的新列中。因为 testData 是代表真实数据帧的测试数据帧,所以我不想对 testData 进行排序。

因为我处理的是累积频率,如果 testData 值为 23.30...,则应返回的 Time 值为 8。也就是说,我需要找到不超过 testData 值的最近的 cumfreq 值,并只返回那个值。

其他类似问题已经提到了data.table包,但我有限的理解是这个包需要在两个数据帧(转换为数据表后)中识别一个键,我不能假定 testData 值满足作为键分配的要求 - 似乎分配键将对数据进行排序。当我稍后在我正在做的进一步工作中播种时,这会给我带来问题。

最佳答案

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

关于r - 将已排序数据框中的最近值绘制到未排序数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657270/

相关文章:

javascript - 如何使用 Javascript 正则表达式按设定顺序匹配子字符串

algorithm - 将学生与实验室配对

r - 如何在R中生成带有累积频率和相对频率的频率表

python - 通过另一个数组中的值阈值快速计算 numpy 数组的元素

R - 在绘图中处理长标签

r - R 中具有面板校正标准误差和 AR(1) 校正的 OLS

r - 确定字符向量中与匹配向量 [R] 中的最大匹配数相匹配的位置

r - 如果变量中存在重复值,则根据其他变量保留具有最低值的行

java - 在Java中查找匹配的对象

sql - 需要按期间(年,月)获取不同的累计计数