r - 如何根据分位数信息编写输入为向量输出为字符向量的函数
问题描述
我正在编写一个函数,其输入是向量,输出是三个级别的字符向量:低于平均值、平均值和高于平均值。我希望根据给定向量的第一个和第三个分位数计算字符向量。当我调用我的函数时,只有低于平均值返回,我理解它为什么返回,但不知道如何修复。理想情况下,我想要一个新向量,使得低于平均值对应于低于第一个分位数的值,高于平均值对应于高于第三个分位数的值,而平均值是介于两者之间的所有值。
x<-c(1:10)
label_scale<-function(vecrr){
lq<-quantile(vecrr,0.25)
uq<-quantile(vecrr,0.75)
if(vecrr<=lq){
k<-'Below Avg.'
} else if(vecrr>=uq){
k<-'Above Avg.'
} else{
k<-'Avg.'}
return(k)
}
y<-mapply(label_scale,x)
z<-sapply(x,label_scale)
解决方案
您的问题是您将函数应用于向量的每个元素,并且默认情况下,给定值始终等于该值的分位数,并且您的过程将为Below Avg
每个向量元素返回。(例如,x == quantile(x, 0.25)
将始终返回 TRUE)。
你应该ifelse
在你的函数内部使用,它是矢量化的:
# example vector
x<-c(1:10)
# function
label_scale<-function(vecrr){
lq<-quantile(vecrr,0.25)
uq<-quantile(vecrr,0.75)
ifelse(vecrr<=lq, 'Below Avg.', ifelse(vecrr>=uq, 'Above Avg.', 'Avg.'))
}
# use function on a vector
label_scale(x)
# [1] "Below Avg." "Below Avg." "Below Avg." "Avg." "Avg." "Avg." "Avg." "Above Avg."
# [9] "Above Avg." "Above Avg."
推荐阅读
- spring-boot - 无法创建 bean flywayInitializer - SpringBoot 2.3.0
- ios - 检测 WKWebView 中的空白页面
- reactjs - 尝试在 API 响应上设置值字符串时,useState 和 useRecoilState 返回 undefined
- layout - 当键盘出现时如何避免在 SwiftUI 中向上移动布局?
- pytorch - Faster RCNN模型(Pytorch)的预测结果为空
- ssms - SQL Server Management Studio 热键
- reactjs - 反应钩子缺少自定义钩子设置器的依赖项
- python - 在 Django 中从模型创建确认消息
- r - 根据R中多行的条件进行变异
- python - 为两个数据框创建列转换表