Как суммировать список переменных в настраиваемой функции dplyr? - PullRequest
1 голос
/ 10 мая 2019

Начальная точка:

У меня есть набор данных (таблица), который содержит множество переменных одного и того же класса (DBL).Они относятся к разным настройкам.Переменная (столбец в таблице) отсутствует.Это rowSum всех переменных, принадлежащих одному параметру.

Цель:

Моя цель - создать наборы данных с одинаковой структурой данных для каждого параметра, включая "rowSum" -Variable (я называю это "s1").

Проблема:

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

Вопрос:

Как решить проблему с помощью dplyr?

Я написалфункция для

(1) поднабора исходного набора данных для интересного параметра (работает), а

(2) для попытки суммировать переменные параметра (не работает; почему?),

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

день - любой день периода исследования

N - чтоКоличество дел, расследованных в этот особый день

Спасибо за любую помощь.

mkr.sumsetting <- function(...,dataset){

  subvars <- rlang::enquos(...)
  #print(subvars)

  # Summarize the variables belonging to the interessting setting
  dfplot <- dataset %>%
    dplyr::select(day,N,!!! subvars) %>%
    dplyr::mutate(s1 = rowSums(!!! subvars,na.rm = TRUE))

  return(dfplot)
   }

1 Ответ

1 голос
/ 10 мая 2019

Мы можем изменить его на строку с as_name и подмножество набора данных с [[ для rowSums

library(rlang)
library(purrr)
library(dplyr)
mkr.sumsetting <- function(...,dataset){

  subvars <- rlang::enquos(...)
  v1 <- map_chr(subvars, as_name)
    #print(subvars)

   # Summarize the variables belonging to the interessting setting
   dfplot <- dataset %>%
     dplyr::select(day, N, !!! subvars) %>%
     dplyr::mutate(s1 = rowSums( .[v1],na.rm = TRUE))

     return(dfplot)
     }

out <- mkr.sumsetting(col1, col2, dataset = df1)
head(out, 3)
#   day  N       col1      col2          s1
#1   1 20 -0.5458808 0.4703824 -0.07549832
#2   2 20  0.5365853 0.3756872  0.91227249
#3   3 20  0.4196231 0.2725374  0.69216051

Или другой вариант будет select quosureа затем сделать rowSums

mkr.sumsetting <- function(...,dataset){

  subvars <- rlang::enquos(...)

    #print(subvars)

   # Summarize the variables belonging to the interessting setting
   dfplot <- dataset %>%
     dplyr::select(day, N, !!! subvars) %>%
     dplyr::mutate(s1 =  dplyr::select(., !!! subvars) %>%
                               rowSums(na.rm = TRUE))

     return(dfplot)
     }

mkr.sumsetting(col1, col2, dataset = df1)

данных

set.seed(24) 
df1 <- data.frame(day = 1:20, N = 20, col1 = rnorm(20),
    col2 = runif(20))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...