r - 在R中设计导出加权平均值的函数
问题描述
我正在设计一个函数来区分它们是否有重复的值。如果是这样,他们应该提出表格,唯一值的排序值,重复值的排序值,向量的平均值,唯一值和重复值的平均值,最后是加权值。请看一下这段代码,让我知道哪一点是错误的。
avg<-function(...){
x<-c(...)
cond<-duplicated(x)
if (any(cond)) {
table(x)
sort(unique(x))
sort(x[cond==T])
mean(x)
mean(unique(x))
mean(sort(x[cond==T]))
for(i in 1:length(unique(x))) {
sort(unique(x))[i]*(as.integer(table(x))[i]/length(x))
}
} else{sum(x)/length(x)
}
}
avg(2,4,3,1,2,1)
解决方案
您的代码的一个问题是,当有任何重复时所做的每个计算都会被覆盖。以下代码返回一个命名的解决方案列表:
weighted.average <- function(x){
t <- table(x)
t.values <- as.integer(names(t))
frequency <- as.integer(t)
weights <- frequency/length(x)
sum(weights * t.values)
}
avg<-function(...){
x<-c(...)
cond<-duplicated(x)
if (any(cond)) {
return_value <- list("Table_x" = table(x),
"unique_x" = sort(unique(x)),
"duplicated_x" = sort(x[cond==T]),
"mean_x" = mean(x),
"mean_unique_x" = mean(unique(x)),
"mean_duplicated_x" = mean(sort(x[cond==T])),
"weighted_average" = weighted.average(x)
)
} else {
return_value <- sum(x)/length(x)
}
}
推荐阅读
- javascript - JavaScript:使用Reduce()构造函数交集,比较输入数组;只返回相交的元素
- python - 如何正确导入 Python 类?
- python-2.7 - 逐行比较两个文件数据并将它们之间的差异仅存储在另一个文件中
- angular - 在 TypeScript 中将字符串转换为字符串文字的更好方法
- angular - 如何处理 Effect 中的 If-else 条件以引发错误或从 API 返回响应?
- python - 如何在使用 os.rename 之前判断文件是否可以重命名
- html - 如何从 HTML 为 SCSS 变量设置值?
- flutter - 如何使用 FlutterDriver 检查小部件是否可见
- c++ - 如何使用 lambda 避免代码重复 const 和 non-const 集合处理
- javascript - 解析从 PHP 脚本返回 2D 数组到 Wordpress 代码块内的 Javascript 变量