首页 > 解决方案 > 如何使用 dplyr 为函数传递单行

问题描述

我正在尝试将自定义函数逐行应用于 data.frame,但我无法弄清楚如何逐行应用该函数。我正在尝试rowwise()如下简单的人工示例:

library(tidyverse)

my_fun <- function(df, col_1, col_2){
  df[,col_1] + df[,col_2]
}

dff <- data.frame("a" = 1:10, "b" = 1:10)

dff %>%
  rowwise() %>%
  mutate(res = my_fun(., "a", "b"))

数据如何不会按行传递。我怎样才能做到这一点?

标签: rdplyr

解决方案


dplyr'srowwise()将行输出 ( .data) 作为列表列表,因此您需要使用[[. 您还需要使用.data而不是.,因为.是整个dff行,而不是单个行。

my_fun <- function(df, col_1, col_2){
  df[[col_1]] + df[[col_2]]
}

dff %>%
  rowwise() %>%
  mutate(res = my_fun(.data, 'a', 'b'))

您可以.data使用下面的代码查看外观

dff %>%
  rowwise() %>%
  do(res = .data) %>% 
  .[[1]] %>% 
  head(1)

# [[1]]
# [[1]]$a
# [1] 1
# 
# [[1]]$b
# [1] 1

推荐阅读