如何使用* pply函数将数据帧和向量映射到函数参数

时间:2018-03-14 02:41:21

标签: r apply mapply

我遇到的问题是* pply的具体操作(如申请或mapply等,我不确定)。

数据框为dlt

        dlt.1    dlt.2    dlt.3    dlt.4    dlt.5  
  1  3.244198 6.482869 9.711874 12.92918 16.13489
  6  3.196401 6.391871 9.585553 12.77681 15.96547
 19  3.182911 6.365424 9.547196 12.72799 15.90795
 24  3.164079 6.328089 9.491971 12.65577 15.81984

,向量为freq

 1 2 3 4 5

现在我打算将dtfreqn映射到函数foo

foo <- function( dlti, freqi){ dlti * freqi }

我希望dlt的第i列对应freq的第i个元素

我尝试了applymapply,但都失败了。有人请告诉我什么是正确的方法?

2 个答案:

答案 0 :(得分:0)

这不是您想要的确切答案,但它显示了方向。 实际上,从您的问题中不清楚您实际想要什么,因为您没有显示所需的结果。您还应该包含创建data.frame的代码。没有它,你的问题就会含糊不清。因此,不要对我的回答进行投票,因为它没有回答你的问题。

    dlt <- tribble(
       ~dlt_1,    ~dlt_2,   ~dlt_3,    ~dlt_4,    ~dlt_5  ,
    3.244198, 6.482869, 9.711874, 12.92918, 16.13489,
    3.196401, 6.391871, 9.585553, 12.77681, 15.96547,
   3.182911, 6.365424, 9.547196, 12.72799, 15.90795,
   3.164079, 6.328089, 9.491971, 12.65577, 15.81984 
)
freqi <- c(1,2,3,4,5)
foo <- function(dlti,freqi){dlti * freqi}
purrr::map2(dlt,freqi,foo)

$dlt_1
[1] 3.244198 3.196401 3.182911 3.164079

$dlt_2
[1] 12.96574 12.78374 12.73085 12.65618

$dlt_3
[1] 29.13562 28.75666 28.64159 28.47591

$dlt_4
[1] 51.71672 51.10724 50.91196 50.62308

$dlt_5
[1] 80.67445 79.82735 79.53975 79.09920

答案 1 :(得分:0)

base R中,我们可以通过复制'freq'来执行此操作,然后执行*

dlt*freq[col(dlt)]
#     dlt.1    dlt.2    dlt.3    dlt.4    dlt.5
#1  3.244198 12.96574 29.13562 51.71672 80.67445
#6  3.196401 12.78374 28.75666 51.10724 79.82735
#19 3.182911 12.73085 28.64159 50.91196 79.53975
#24 3.164079 12.65618 28.47591 50.62308 79.09920

或在Map

中使用base R
dlt[] <-  Map(`*`, dlt, freq)