R, передать сгруппированный столбец как строку, чтобы суммировать аргумент функции - PullRequest
1 голос
/ 22 апреля 2020

В приведенном ниже коде

# data frame df has columns A, B, C, D, E and few more
tmp = group_by( df, A, B, C, D)
tmp = summarise( tmp, NewColumn = min( E))

Я хотел бы изменить столбец E во второй строке на строчку или любой формат, который позволит иметь эти две строки кода в функции, т.е. (один из возможных форматов)

getSummary = function( tmp = NULL, col2pass = 'E') {

                       tmp = group_by( df, A, B, C, D)
                       tmp = summarise( tmp, NewColumn = min( col2pass))

                       return( tmp)
             }

Я пытался tmp[ , colnames( tmp)[[ index_of_E]]], tmp[ 'E'] или просто "E", но это, очевидно, не работает; в первых двух случаях группировка теряется, а во втором случае строка интерпретируется как буквальная строка.

Спасибо

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Вы сталкиваетесь с сложной проблемой стандартной оценки с dplyr. Если вы начнете писать функции, используя имена переменных, вы, возможно, найдете data.table более простым в обращении (у вас есть примеры в посте , который я сделал )

dplyr

С dplyr Вы можете использовать rlang для удаления кавычек:

tmp = summarise( tmp, NewColumn = min(!!rlang::sym(col2pass)))

Вы также можете использовать синтаксис {{}} для удаления кавычек ( недавняя функция ):

tmp = summarise(tmp, NewColumn = min({{col2pass}}))

data.table

Вы можете написать:

library(data.table)
setDT(tmp)
tmp[, .('NewColumn' = get(col2pass))]
0 голосов
/ 22 апреля 2020

Мы можем использовать summarise_at

library(dplyr)
tmp %>%
     summarise_at(vars(col2pass), min) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...