R中的一种函数方法,用于将函数应用于使用另一个 Dataframe 的每列输入的 Dataframe

s5a0g9ez  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(99)

我想基于查找表对数据框中的所有元素应用线性近似。
我可以对一个查找表执行此操作,但我需要一种函数方法(即mapapply),以便对写入一个 Dataframe 的多个查找表多次执行此操作。
我有 Dataframe A,因此

A <- data.frame(cbind(c(2,2,1),c(1,1,2),c(2,1,2)))

以及查找值表Z

Z <- data.frame(cbind(c(1,2),c(0.25,0.5)))

我想将其用作 Dataframe A中的值的线性插值的基础。
我可以编写一个函数,根据Z中的值对A中的值进行插值,即

approximate <- function(x) approx(x=Z[,1], y=Z[,2], xout=x)$y

并将其应用于A中的所有元素

library(purrr)
as.data.frame(purrr::map(A, approximate))

例如,对于Z中的多个列,如何执行此操作

Z1 <- data.frame(cbind(c(1,2),c(0.25,0.5),c(0.5,1)))

期望的输出将是两个列表,每个列表包含大小为A的 Dataframe ,该 Dataframe 对Z1[,-1]c(0,25,0.5), c(0.5,1), ...的每列应用approximate函数。

bcs8qyzn

bcs8qyzn1#

您可以更改approximate()函数,使其包含一个参数,用于指定Z1[, -1]中要用于y的列。这样,Z1[, -1]上就有一个外部map()A上就有一个内部map_dfr()(在此上下文中相当于as.data.frame(map()))。例如:

library(purrr)

approximate <- function(xout, y, x) approx(x, y, xout)$y
    
map(Z1[, -1], function(y) map_dfr(A, approximate, y, Z1[, 1]))

相关问题