繁体   English   中英

在 R 中一次“应用”两个不同的数据帧

[英]'apply' on two different data frames at once in R

我想知道是否有办法使用 apply-family 函数一次评估两个不同的数据帧? 或者有没有更好的方法来解决这个问题? 我只能想到一个循环,那太慢了:

# example data
df_model <- data.frame(DY = c(93,100,107), CC=rnorm(1:3, mean = 0.1))

df_data  <- data.frame(DY = rep(c(93,100,107),each = 3), CC = c(rnorm(1:3),rnorm(1:3),rnorm(1:3)))

在这个例子中,我想要一个包含三个元素的向量作为输出,处理如下(这里是第一种情况)

#example procedure case 1
collect <- matrix(0,ncol=3,nrow=3)
 collect[1,] <-  dnorm( df_data[which(df_data$DY == df_model$DY[1]),]$CC, df_model[1,]$CC, log=TRUE )  

作为输入,我设想了 df_data 中的 CC 列表/向量,按相应的日期 DY (0.07624536 1.32623789 0.92921693) 进行子集化
在相应的 DY 日根据 df_model 的一个值 (0.00049671) 进行评估

最后,我想收集 example(collect) 中的向量,一个由三个 df_model$DY 和三列的行数组成的矩阵,其中包含在 DY 日针对 df_model 对 df_data 的评估。

       [,1]     [,2]       [,3]
[1,] -0.9218075 -1.7977334 -1.3501992
[2,] -0.9356356 -0.9850012 -1.1753341
[3,] -1.2152926 -0.9195071 -2.4127840

这需要尽可能高效地完成。 我可以在循环中完成(在上面你看到循环的第一个案例),但我相信有更好的方法。 我查看了 apply 函数系列,但我感到困惑,因为我评估了两个不同的数据帧。 任何帮助/指针将不胜感激!

我们可以使用mapplyMap

mapply(function(x, y) dnorm(df_data$CC[df_data$DY == x], y, 
       log = TRUE), df_model$DY, df_model$CC)

-输出

#          [,1]       [,2]      [,3]
#[1,] -1.5031401 -2.7449464 -1.734319
#[2,] -0.9237629 -0.9243094 -1.115875
#[3,] -4.9848319 -1.1494313 -1.187122

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM