【问题标题】:'apply' on two different data frames at once in R在R中一次“应用”两个不同的数据帧
【发布时间】:2020-10-30 17:17:45
【问题描述】:

我想知道是否有办法使用 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) 进行评估

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

       [,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 函数系列,但我感到困惑,因为我有两个不同的数据框要评估。任何帮助/指针将不胜感激!

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用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
    

    【讨论】:

    • 非常感谢!这正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多