Зацикливание нескольких переменных в R - PullRequest
2 голосов
/ 04 мая 2019

Я новичок в R. У меня есть фрейм данных с данными на уровне фирмы, такими как доход, прибыль и расходы.Мне нужно было бы перебрать 3 переменные - доход, прибыль и затраты по этому коду:

datagroup %>% group_by(treat) %>% summarise(n = n(), mean = mean(profit), std_error = sd(profit) / sqrt(n))

По сути, я бы запустил код выручки и затрат, заменив переменную прибыль.Не могли бы вы помочь?Я пробовал петли, но безрезультатно.

Ответы [ 2 ]

3 голосов
/ 04 мая 2019

Мы можем сделать это в цикле с именем столбца в виде строки, затем преобразовать его в symbol, вычислить (!!) и получить mean

library(tidyverse)
c("revenue", "costs") %>%
   map(~ datagroup %>% 
         group_by(treat) %>%
          summarise(n = n(), 
          !! str_c("mean_", .x) := mean(!! rlang::sym(.x)), # convert to symbol 
         !! str_c("std_error_", .x) := sd(!! rlang::sym(.x)) / sqrt(n)))

Мы также можем сделать это с summarise_at

c("revenue", "costs") %>%
   map(~ datagroup %>% 
         group_by(treat) %>%
         group_by(n = n(), add = TRUE) %>%             
          summarise_at(vars(.x), 
              list(mean = ~ mean(.x),
                   std_error = ~ sd(.x)/sqrt(first(n)))))

Выход будет list из data.frame s

0 голосов
/ 04 мая 2019

Поскольку вы новичок в R, рассмотрите базу R для нескольких агрегатных функций в нескольких числовых столбцах через cbind + aggregate + do.call:

do.call(data.frame, 
   aggregate(cbind(revenue, cost, profit) ~ treat, 
             datagroup, 
             function(x) c(n = length(x), 
                           mean = mean(x), 
                           std_error = sd(x) / sqrt(length(x))
                          )
   )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...