【发布时间】:2019-11-20 04:58:12
【问题描述】:
我正在处理包含以下内容的数据框:
每个簇的计数(流式细胞术数据)
几个文件
- 以及机器记录的大量变量的平均值、最大值、最小值和总数。
如果我想减少组的数量(将相似的集群汇集在一起),我想按文件将组“a”和“b”的所有信息合并到一个文件中
到目前为止,按照SO Question,我已经计算出了最小值、最大值和总数,但是我一直坚持如何使用自定义函数在这个结构 (mutate_at) 中进行以下计算:
('a' 的计数 * 'a' 的平均值 + 'b' 的计数 * 'b' 的平均值) / 总和('a' 的计数,'b' 的计数)
为了重新计算每个 mean_i 列的新 mean,其中等式中的“均值”是指包含我用 vars(mean_cols) 调用的平均值的列中的 1 个
目前的代码:
library(dplyr)
set.seed(123)
df <- data.frame(ID = 1:20,
total_X = runif(20),
min_X = runif(20),
max_X = runif(20),
mean_X = runif(20),
total_Y = runif(20),
min_Y = runif(20),
max_Y = runif(20),
mean_Y = runif(20),
Counts = runif(20)*1000,
category = rep(letters[1:5], 4),
file = as.factor(sort(rep(1:4, 5))))
total_cols = names(df)[which(grepl('total', names(df)))]
min_cols = names(df)[which(grepl('min', names(df)))]
max_cols = names(df)[which(grepl('max', names(df)))]
mean_cols = names(df)[which(grepl('total', names(df)))]
recalmean <- function() { sum(Counts * vars)/sum(Counts)}
#counts of 'a' * mean of 'a' + counts of 'b' * mean of 'b' / sum(counts for 'a', counts of 'b' )
x <- df %>% bind_rows(
df %>%
filter(category %in% c('a' , 'b')) %>%
group_by(file) %>%
mutate_at(vars(total_cols), sum) %>%
mutate_at(vars(min_cols), min) %>%
mutate_at(vars(max_cols), max) %>%
# mutate_at(vars(mean_cols), recalmean) %>% ## this line needs to do the custom weighed mean calculation
mutate(category = paste0(category,collapse='')) %>%
filter(row_number() == 1 & n() > 1)
) %>% mutate(ID = row_number())
【问题讨论】:
-
如果您使用随机数创建样本数据,例如,通过
runif()或sample(),请预先使用set.seed(<some value>)以使样本数据可重现。那么,潜在的答案更容易比较。谢谢。 -
对不起,我以为我在里面