英文:
A functional approach in R to apply a function to a data frame that uses input from each column of another data frame
问题
Sure, here is the translation of the code-related content:
我想对数据帧中的所有元素应用线性逼近,基于查找表。
我能够为一个查找表执行此操作,但我需要一种功能性方法(即 map
或 apply
)来多次应用此操作,用于多个写入一个数据帧的查找表。
我有数据帧 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)))
我希望将其用作数据帧 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
的数据帧,应用 Z1[,-1]
的每一列的 approximate
函数,即 c(0.25,0.5), c(0.5,1), ...
。
英文:
I want to apply a linear approximation to all elements in a data frame based on a lookup table.
I am able to do this for one lookup table, but I would need a functional approach (i.e. map
or apply
) to apply this multiple times for a number of lookup tables, which are written in one data frame.
I have data frame A
, such that
A <- data.frame(cbind(c(2,2,1),c(1,1,2),c(2,1,2)))
and a table of lookup values Z
Z <- data.frame(cbind(c(1,2),c(0.25,0.5)))
which I want to use as basis for linear interpolation for values in data frame A
.
I can write a function that interpolates the values in A
based on values in Z
, such that
approximate <- function(x) approx(x=Z[,1], y=Z[,2], xout=x)$y
and apply it to the all elements in A
library(purrr)
as.data.frame(purrr::map(A, approximate))
How would I do this for more than one columns in Z
, for example
Z1 <- data.frame(cbind(c(1,2),c(0.25,0.5),c(0.5,1)))
The desired output would be two lists that each contain a data frame of size A
that applies the approximate
function for each column of Z1[,-1]
, c(0,25,0.5), c(0.5,1), ...
.
答案1
得分: 0
你可以修改你的 approximate()
函数,包括一个参数用于指定要用于 y
的 Z1[, -1]
的哪一列。然后,你可以在 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]))
英文:
You can change your approximate()
function to include an argument for which column of Z1[, -1]
to use for y
. You can then have an outer map()
over Z1[, -1]
and an inner map_dfr()
(equivalent to as.data.frame(map())
in this context) over A
. For example:
library(purrr)
approximate <- function(xout, y, x) approx(x, y, xout)$y
map(Z1[, -1], function(y) map_dfr(A, approximate, y, Z1[, 1]))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论