【问题标题】:Computing ratio between elements with dplyr in R data frame?在 R 数据框中使用 dplyr 计算元素之间的比率?
【发布时间】:2020-12-22 15:02:21
【问题描述】:

假设我们有一个这样的数据框 (df):

a b
1 2
2 4
3 6

如果我想计算向量ab 中每个元素的比率并分配给变量c,我们会这样做:

c <- df$a / df$b

但是,我想知道如何使用 dplyr 包完成相同的操作? IE。有没有什么方法可以使用dplyr中的函数来实现?

【问题讨论】:

标签: r dataframe dplyr


【解决方案1】:

也许你可以试试下面的代码

df %>%
  mutate(c = do.call("/", .))

df %>%
  mutate(c = Reduce("/", .))

df %>%
  mutate(c = a/b)

【讨论】:

  • 前两个选项比第三个有什么优势?如果那里确实有更多列,这似乎是一种扩大规模的尝试,实际上会适得其反
  • @camille 是的,如果有很多列名,您可以跳过输入列名
  • 但是如果你有例如5 列,并且您使用前 2 个选项之一,您正在划分所有列并且不再计算比率。这就是我所说的扩大实际上没有意义的操作的意思
  • @camille 是的,我明白你的意思。实际上do.callReduce 在这里适用只是因为操作术语是不可交换的并且只有两列。一种是列数增加并且术语是可交换的,Reduce 将是一种可能且可爱的选择。我将前两种方法放在那里的原因是我们可以在不知道具体列名的情况下实现目标。
【解决方案2】:

invoke 的选项

library(dplyr)
library(purrr)
df %>% 
   mutate(c = invoke('/', .))

-输出

#  a b   c
#1 1 2 0.5
#2 2 4 0.5
#3 3 6 0.5

数据

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

【讨论】:

    【解决方案3】:

    您可以使用dplyr 库中的mutate 函数:

    df <- data.frame(a = c(1,2,3), b= c(2,4,6))
    
    library(dplyr)
    
    df <- df %>%
               dplyr::mutate(c = a/b)
    
    

    控制台输出:

      a b   c
    1 1 2 0.5
    2 2 4 0.5
    3 3 6 0.5
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-13
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多