【问题标题】:When is operation complexity such that dplyr rowwise is needed?何时需要 dplyr rowwise 的操作复杂性?
【发布时间】:2019-06-12 18:36:51
【问题描述】:

根据documentation,dplyr rowwise 运算符可用于“支持需要应用于每一行的任意复杂操作”。我觉得这有点模糊。例如,加法似乎没有上升到逐行所需的复杂程度:

df <- data.frame( a =  c(1,2,3,4), b = c(5,6,7,8)) 
df %>% 
  mutate(
    c = a+b,
  )

  a b  c
1 1 5  6
2 2 6  8
3 3 7 10
4 4 8 12

但有一个非常相似的功能,sum 可以。例如:

df %>%
  mutate(
    d = sum(a,b)
  ) %>%
  rowwise() %>%
  mutate(
    e = sum(a,b)
  )

  a b  d  e
1 1 5 36  6
2 2 6 36  8
3 3 7 36 10
4 4 8 36 12

我的问题是,在 dplyr 操作过程中,我们究竟什么时候需要使用rowwise?任何时候操作都不是基本算术操作,或者是否有其他规则来说明操作何时会自动将其输入视为按行与按列?

【问题讨论】:

  • 我经常发现rowwise() %&gt;% mutate(...) 可以替换为对mutate(a = Map(...))(或mapplypurrr::pmap 或其同级之一)的调用。

标签: r dplyr


【解决方案1】:

我认为简短的答案是 sum, max 不是“矢量化”的,它接受多个向量并为您提供汇总的答案,有点奇怪。我通常尝试使用不需要rowwise 的函数,因为它很慢,而且出错的风险很高。您的简单案例的解决方案可能是:

library(hablar)
library(dplyr)

df <- data.frame( a =  c(1,2,3,4), b = c(5,6,7,8)) 

df %>% mutate(c = row_sum(a:b))

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多