Как передать одну строку для функции, используя dplyr - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь применить пользовательскую функцию к строке 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"))

Как бы то ни было, данные не передаются по строкам.Как мне этого добиться?

1 Ответ

0 голосов
/ 18 октября 2018

dplyr 'rowwise() помещает вывод строки (.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...