R Создать пользовательскую функцию с Группировать по и Mutate - PullRequest
0 голосов
/ 23 октября 2018

У меня есть набор данных и выполняются функции group_by и mutate.

Но при этом возникают ошибки при использовании пользовательской функции и определенного столбца, например Value_1 или Value_2.

Plsсообщите, если я что-то упускаю в пользовательской функции

Набор данных:

library(dplyr)

df <- data.frame(
Date = c("2010-10-06", "2010-10-06", "2010-10-06", "2010-10 
06", "2010-10-06", "2010-10-06", "2010-10-06", "2010-10-06"),
Region = c("Central", "Central", "Central", "Central", "North", "North", 
"North", "North"),
Value_1 = c(10, 2, 4, 12, 4, 4, 2, 15),
Value_2 = c(120, 45, 20, 20, 60, 50, 75, 80),
stringsAsFactors = F)

Работает нормально:

df %>%
group_by(Date, Region) %>%
mutate(Value_3 = sum(Value_1)) %>%
ungroup()

Ошибка с пользовательской функцией:

test_fn <- function(dataset, Col1) {  
dataset <- dataset %>%
group_by(Date, Region) %>%
mutate(Value_3 =  sum(Col1)) %>%
ungroup()  
return(dataset)
}

df_3 <- test_fn(df, "Value_1")

Ответы [ 2 ]

0 голосов
/ 23 октября 2018
test_fn <- function(dataset, Col1) {  
  Col1 = sym(Col1)
  dataset <- dataset %>%
    group_by(Date, Region) %>%
    mutate(Value_3 =  sum(!!Col1)) %>%
    ungroup()  
  return(dataset)
}

Если вы измените sym(Col1) на enquo(Col1), вам не нужно передавать Col1 в виде строки, то есть test_fn(df, Value_1)

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

Посмотрите на это для вашей первой половины, и я или кто-то другой закончу вторую половину вашего решения.Вам необходимо узнать о стандартных и нестандартных оценках .

tfn <- function(data, col, groups) {
  temp <- data %>%
    ## this gets you to group by the variables 
    ## you need to group by in a standard evaluation way
    group_by_(.dots = groups) %>%
    ## now do a mutate with the dynamic variable name
   ## mutate_(.dots and setName(value, var name)

  temp
}

tfn(df, "Value_1", c("Date", "Region"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...