【发布时间】:2020-12-22 15:02:21
【问题描述】:
假设我们有一个这样的数据框 (df):
a b
1 2
2 4
3 6
如果我想计算向量a 和b 中每个元素的比率并分配给变量c,我们会这样做:
c <- df$a / df$b
但是,我想知道如何使用 dplyr 包完成相同的操作? IE。有没有什么方法可以使用dplyr中的函数来实现?
【问题讨论】:
假设我们有一个这样的数据框 (df):
a b
1 2
2 4
3 6
如果我想计算向量a 和b 中每个元素的比率并分配给变量c,我们会这样做:
c <- df$a / df$b
但是,我想知道如何使用 dplyr 包完成相同的操作? IE。有没有什么方法可以使用dplyr中的函数来实现?
【问题讨论】:
也许你可以试试下面的代码
df %>%
mutate(c = do.call("/", .))
或
df %>%
mutate(c = Reduce("/", .))
或
df %>%
mutate(c = a/b)
【讨论】:
do.call 和Reduce 在这里适用只是因为操作术语是不可交换的并且只有两列。一种是列数增加并且术语是可交换的,Reduce 将是一种可能且可爱的选择。我将前两种方法放在那里的原因是我们可以在不知道具体列名的情况下实现目标。
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))
【讨论】:
您可以使用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
【讨论】: