插入表格的单行

问题描述 投票:0回答:2

我正在尝试在单个点插入一行数据帧。我可以使用

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 方法。

r interpolation
2个回答
0
投票

您可以使用

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()
解决方案返回命名数值向量。


0
投票

您正在寻找

sapply(df[, 2:4], \(y) approx(x=df$x, y=y, xout=target_x)$y)
#    y1    y2    y3 
# -0.08 -0.08  0.02 

数据:

df <- structure(list(x = c(1.1, 1.2, 1.3, 1.4), y1 = c(-0.6, -0.4, 
0.4, 1.2), y2 = c(-0.7, -0.4, 0.4, 0.46), y3 = c(-0.8, -0.3, 
0.5, 1.2)), class = "data.frame", row.names = c(NA, -4L))

target_x <- 1.24
© www.soinside.com 2019 - 2024. All rights reserved.