在R中循环多个变量

时间:2019-05-04 15:13:10

标签: r

我是R的新手。我有一个包含公司级数据(例如收入,利润和成本)的数据框。我需要遍历此代码的3个变量-收入,利润和成本:

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

基本上,我将通过替换可变利润来运行收入和成本代码。你能帮忙吗?我尝试循环,但无济于事。

2 个答案:

答案 0 :(得分:3)

我们可以循环使用列名作为字符串,然后将其转换为long,求值(// Consider using std::is_floating_point_v for K template <typename K, typename V> class QuantizedGrid { int quantizer; std::unordered_map<int, V> map; public: explicit QuantizedGrid(const double epsilon) { quantizer = 1.0 / epsilon; } V& operator[](const K k) { return map[static_cast<int>(quantizer * k)]; } bool contains(const K k) const { int key = static_cast<int>(quantizer * k); return map.count(key) > 0; } }; )并获得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)))))

答案 1 :(得分:0)

由于您不熟悉R,因此请考虑通过cbind + aggregate + do.call在多个数字列上使用多个聚合函数的基数R:

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))
                          )
   )
)