【问题标题】:Add data frames row wise with [d]plyr使用 [d]plyr 逐行添加数据框
【发布时间】:2015-04-25 10:50:09
【问题描述】:

我有两个数据框

df1
#    a  b
# 1 10 20
# 2 11 21
# 3 12 22
# 4 13 23
# 5 14 24
# 6 15 25

df2
#   a b
# 1 4 8

我想要以下输出:

df3
#    a  b
# 1 14 28
# 2 15 29
# 3 16 30
# 4 17 31
# 5 18 32
# 6 19 33

即将 df2 添加到 df1 的每一行。

有没有办法使用 plyr (mdplyr??) 或 dplyr 获得所需的输出?

【问题讨论】:

    标签: r plyr dplyr


    【解决方案1】:

    我认为没有理由为这样的事情使用“dplyr”。在基础 R 中,您可以这样做:

    df1 + unclass(df2)
    #    a  b
    # 1 14 28
    # 2 15 29
    # 3 16 30
    # 4 17 31
    # 5 18 32
    # 6 19 33
    

    df1 + list(4, 8)相同。

    【讨论】:

    • @jazzurro,实际上,我更喜欢我的“另类”方法,而不是原来的方法。
    • 哈哈。我同意!我不能指望unclass() 在这里。我希望我可以再投票一次。 :)
    • 实际上——放弃 mapply 方法,因为它不能很好地扩展。
    • 我明白了。我会在我的笔记本上写下这段代码。 :)
    【解决方案2】:

    一个带 dplyr 的衬垫。

    mutate_each(df1, funs(.+ df2$.), a:b)
    
    #   a  b
    #1 14 28
    #2 15 29
    #3 16 30
    #4 17 31
    #5 18 32
    #6 19 33
    

    【讨论】:

    • 只有mutate_each(df1, funs(. + df2$.)) 可以工作。此处无需指定a:b
    【解决方案3】:

    使用甜函数sweep的基础R解决方案:

    sweep(df1, 2, unlist(df2), '+')
    #   a  b
    #1 14 28
    #2 15 29
    #3 16 30
    #4 17 31
    #5 18 32
    #6 19 33
    

    【讨论】:

    • 我发布了一个有点相似的mapply 选项。这比mapply 版本的性能更好,但不如unclass。 +1 替代方案 :-)
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多