我正在尝试使用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))
答案 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中使用它来计算组子集的方差。