将已排序数据框中的最近值绘制到未排序数据框中
Draw nearest value from sorted data frame into unsorted data frame
我在 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
值添加到 [=15] 中的新列中=].因为 testData
是代表真实数据框的测试数据框,所以我不想对 testData
.
进行排序
因为我处理的是累积频率,如果 testData
值为 23.30...
,则应 returned 的 Time
值为 8
。也就是说,我需要找到最近的 cumfreq
不超过 testData
值的值,而 return 只有那个值。
其他类似问题已经提到了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
中有两个数据框。第一个数据帧是具有相关周期的累积频率分布 (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
值添加到 [=15] 中的新列中=].因为 testData
是代表真实数据框的测试数据框,所以我不想对 testData
.
因为我处理的是累积频率,如果 testData
值为 23.30...
,则应 returned 的 Time
值为 8
。也就是说,我需要找到最近的 cumfreq
不超过 testData
值的值,而 return 只有那个值。
其他类似问题已经提到了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