簡體   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