【问题标题】:how to map a dataframe and vectors into function parameters with *pply functions如何使用 *pply 函数将数据框和向量映射到函数参数
【发布时间】:2018-03-14 02:41:20
【问题描述】:

我遇到的问题是针对*pply的具体操作(比如apply或者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,但都失败了。有人可以告诉我什么是正确的方法吗?

【问题讨论】:

    标签: r apply mapply


    【解决方案1】:

    这不是您想要的确切答案,但它显示了方向。 实际上,您的问题并不清楚您真正想要什么,因为您没有显示所需的结果。您还应该包含创建 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
    

    【讨论】:

    • 这正是我的意图。非常感谢!
    【解决方案2】:

    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
    

    或者在base R中使用Map

    dlt[] <-  Map(`*`, dlt, freq)
    

    【讨论】:

    • 您的回答也因其简洁而受到高度赞赏。
    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多