在R中,我在一个数据帧中获得了一些数据,其中x值位于df $ a列中,而y则位于df $ b列中。我想将它们插值到一系列生成的x值àla output_x_values <- seq(0.0, 100.0, 1.0)
。现在approx(df$a, y = df$b, xout = output_x_values)
只能以length(output_x_values)
从给定df中提取第一个nrow(df) > length(output_x_values)
。这里出了什么问题,我该怎么解决? Atm看起来如图所示,我想添加一条中线。Fraction of precipitation by percentile.
您尝试用于插值的近似函数具有默认的“ rule”参数,该参数不会对向量中观察到的范围之外的值进行插值,而该矢量将用NA截断结果中的值。您可以将其更改为“ rule = 2”,以便允许插值超出预期范围:
output_x_values <- seq(0.0, 100, 1.0)
# Toy data
set.seed(1)
df <- data.frame(a = seq(50, 150, 10), b = seq(0, 100, 10) + rnorm(11, 20, 10))
df
# a b
# 1 50 13.73546
# 2 60 31.83643
# 3 70 31.64371
# 4 80 65.95281
# 5 90 63.29508
# 6 100 61.79532
# 7 110 84.87429
# 8 120 97.38325
# 9 130 105.75781
# 10 140 106.94612
# 11 150 135.11781
approx(x = df$a, y = df$b, xout = output_x_values, rule = 2)
但是,这对数据有些奇怪:
plot(df)
plot(approx(x = df$a, y = df$b, xout = output_x_values, rule = 2))
您不妨尝试:
# Toy data scaled with centiles but without interpolation
plot(percent_rank(df$a), percent_rank(df$b))
# Toy data scaled with centiles with interpolation
plot(approx(x = percent_rank(df$a), y = percent_rank(df$b), n = 100))