我正在尝试在单个点插入一行数据帧。我可以使用
approx
来获取单个值,但最终需要得到一个向量或单行,数据帧的每一列都有一个值。
df <- data.frame(
x = c(1.1, 1.2, 1.3, 1.4),
y1 = c(-.6,-.4, .4, 1.2),
y2 = c(-.7, -.4, .4, .46),
y3 = c(-.8, -.3, .5, 1.2)
)
df
x y1 y2 y3
1 1.1 -0.6 -0.70 -0.8
2 1.2 -0.4 -0.40 -0.3
3 1.3 0.4 0.40 0.5
4 1.4 1.2 0.46 1.2
target_x <- 1.24
## Works
approx(df$x, df$y1, target_x)$y
>[1] -0.08
### looking for something like approx(df$x, df[,2:4], target_x)
## should return:
> [1] -0.08 -0.08 0.02
线性插值很好,我不需要在现有表格之外进行推断。首选基本 R 或 dplyr 方法。
您可以使用
dplyr
来执行此操作,使用 reframe()
和 across()
来识别所有以“y”开头的变量。它看起来是这样的。在下面的 across()
语句中,.x
代表 across 语句中的每个变量 - 在本例中,代表所有以“y”开头的变量。
library(dplyr)
df <- data.frame(
x = c(1.1, 1.2, 1.3, 1.4),
y1 = c(-.6,-.4, .4, 1.2),
y2 = c(-.7, -.4, .4, .46),
y3 = c(-.8, -.3, .5, 1.2)
)
target_x <- 1.24
df %>%
reframe(across(starts_with("y"),
~approx(x, .x, target_x)$y))
#> y1 y2 y3
#> 1 -0.08 -0.08 0.02
还有一个使用
sapply()
的基本 R 选项,其中第一个参数是要用作 approx
中的 y 变量(作为字符串向量)的变量名称列表。
sapply(c("y1", "y2", "y3"), function(y){
approx(df$x, df[[y]], target_x)$y
})
#> y1 y2 y3
#> -0.08 -0.08 0.02
创建于 2023-08-16,使用 reprex v2.0.2
您使用哪一种可能取决于您想要什么样的输出。
dplyr
解决方案返回数据框,而 sapply()
解决方案返回命名数值向量。