我正在尝试找到一种快速方法来在我拥有的一组数据框中找到一系列 Y 值。这是我的数据框的样子:
#Example dataframe1
X Y
0 0
0.2 27
0.4 31
0.6 34
0.8 39
1.0 43
1.2 44
#Example dataframe2
X Y
0 0
0.2 12
0.3 14
0.4 18
0.5 21
0.6 22
0.7 24
0.8 29
0.9 34
1.0 38
1.1 40
#Example dataframe3
X Y
0 0
0.2 19
0.3 24
0.4 29
0.5 34
0.6 38
0.7 39
0.8 47
0.9 51
1.0 52
1.1 56
现在,假设我想确定相对于期间开始时大约 x = 1.0 的增长率(即在每种情况下开始时为 0)。在这里我们可以清楚地看到,三种情况中的答案是y = 43、y = 38和y = 52,其中52最高,38最低(因此,范围为14)。我的问题是,是否可以在我拥有的 10 个数据帧中快速确定 x = 1.0 左右的值,而无需手动检查它们?这个想法是确定所有数据帧中 y 在 x = 1.0 左右的值范围。请注意,它并非在所有数据框中都是完美的 x = 1.0 - 有些可能是 0.99 或 1.01.
谢谢您,非常感谢您的反馈!
您可以
rbind
所有数据框,然后子集并使用 range
其中 X
等于,然后 diff
来计算您想要的值。例如,在您的示例中:
ll <- rbind(df1, df2, df3)
range(ll[ll$X == 1, "Y"])
# [1] 38 52
rr <- range(ll[ll$X == 1, "Y"])
diff(rr)
# [1] 14
您可以通过为摆动空间创建最小值和最大值来在 1.0 的范围内稍微扩展一下:
minwiggle <- 0.99
maxwiggle <- 1.01
range(ll[ll$X <= maxwiggle & ll$X >= minwiggle, "Y"])
# [1] 38 52
rr <- range(ll[ll$X <= maxwiggle & ll$X >= minwiggle, "Y"])
diff(rr)
# [1] 14
一种方法:
target_val = 1 ## X value to match (as close as possible)
list(df_A, df_B, df_C) |> ## list of dataframes
Map(f = \(the_df) {
## find row index where X is closest to the target_val
row_index = which.min(abs(the_df$X - target_val))
the_df$Y[row_index]
}) |>
Reduce(f = c) |> ## concatenate values
fivenum() ## put aggregating function here
X == 1 的输出,使用您的示例数据帧:
[1] 38.0 40.5 43.0 47.5 52.0