gpt4 book ai didi

r - 如何在 r 中快速赋值

转载 作者:行者123 更新时间:2023-12-01 11:16:03 25 4
gpt4 key购买 nike

我想在 R 中运行分区回归,为此我需要分配一个因子来指示此数据属于哪个分区。比如大于mean+2个标准差的时候,我把指标赋值2,mean+1sd和mean+2sd之间赋1,以此类推。我知道这可以通过 if 和 else 来完成。但是当分区太多时,代码似乎太长了。有什么简单简洁的方法可以实现吗?

   mean=mean(x)
sd=sd(x)
if((x[i]-mean)/sd< -3) signal[i]=-3
if((x[i]-mean)/sd> -3) signal[i]=-2
if((x[i]-mean)/sd> -2) signal[i]=-1
if((x[i]-mean)/sd> -1) signal[i]=0
if((x[i]-mean)/sd>1) signal[i]=1
if((x[i]-mean)/sd>2) signal[i]=2
if((x[i]-mean)/sd>3) signal[i]=3
}

感谢@jogo 和@r.user.05apr。现在我有一个稍微不同的问题。我想根据滚动窗口计算分区,例如 20 天,这意味着我需要根据过去 20 天(第 t-20 天到第 t-1 天)缩放第 t 天的数据并分配相同的值作为以上根据其 z 分数。这种情况下cut功能还能用吗?我写了一个带有循环和 if 语句的代码

signal <- vector()
n=20 #window
for(i in (n+1):length(x)){
mean=mean(x[(n-20):(n-1)])
sd=sd(x[(i-20):(i-1)])
if((x[i]-mean)/sd< -3) signal[i]=-3
if((x[i]-mean)/sd> -3) signal[i]=-2
if((x[i]-mean)/sd> -2) signal[i]=-1
if((x[i]-mean)/sd> -1) signal[i]=0
if((x[i]-mean)/sd>1) signal[i]=1
if((x[i]-mean)/sd>2) signal[i]=2
if((x[i]-mean)/sd>3) signal[i]=3
}

最佳答案

你可以使用cut()

x <- iris$Petal.Length
m <- mean(x)
s <- sd(x)
cut((x - m)/s, breaks = c(-Inf, -3, -2, -1, 1, 2, 3, +Inf), labels = c((-3):3))

强制转换为数字:

as.numeric(as.character(cut((x - m)/s, breaks = c(-Inf, -3, -2, -1, 1, 2, 3, +Inf), labels = c((-3):3))))

备注:

你可以将(x - m)/s缩短为scale(x)

关于r - 如何在 r 中快速赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com