如何获取向量子集的方差?

时间:2017-03-05 08:20:04

标签: r dplyr

我正在尝试使用dplyr在不同的数据组上创建汇总统计信息。

让我们对第1组说: variable1 <- c(4,51,100,200,10)

我希望代码能够沿着这些方向发展:

library(dplyr)

summaryVars <- df %>%
  group_by(group) %>%
  summarise_all(funs(mean, var, limited_var = var(if variable1 > 50))

如何返回limited_var = var(c(51,100,200))

2 个答案:

答案 0 :(得分:0)

一种方法是使用mutate代替summarise,最后使用slice,即

library(dplyr)

#Creating a toy data set
df <- data.frame(variable1 = c(4, 51, 100, 200, 10), iris, stringsAsFactors = FALSE) %>% 
    group_by(Species) %>% 
    filter(row_number() == 1:5) %>% 
    ungroup()

str(df)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  15 obs. of  6 variables:
 #$ variable1   : num  4 51 100 200 10 4 51 100 200 10 ...
 #$ Sepal.Length: num  5.1 4.9 4.7 4.6 5 7 6.4 6.9 5.5 6.5 ...
 #$ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.2 3.2 3.1 2.3 2.8 ...
 #$ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 4.7 4.5 4.9 4 4.6 ...
 #$ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 1.4 1.5 1.5 1.3 1.5 ...
 #$ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 2 2 2 2 2 ...


df %>% 
 group_by(Species) %>% 
 mutate(limited_var = var(variable1[variable1 > 50])) %>% 
 mutate_at(vars(-limited_var), funs(mean, var)) %>% 
 slice(1L) %>%
 ungroup()

答案 1 :(得分:0)

以下是您回答我的问题所需的一切:

    var splitArr = function (arr) {
    var numOfElements = Math.floor(Math.sqrt(arr.length));
    var newArr = [];
     while (arr.length > 0) {
       newArr.push(arr.splice(0,numOfElements))
     }
     return newArr;
   }

console.log(splitArr(arr));

在dplyr中使用它来计算组子集的方差。