Я хочу запустить регрессию секций в R, для которой мне нужно назначить коэффициент, чтобы указать, к какому разделу относятся эти данные. Например, когда оно больше среднего значения + 2 стандартных отклонения, я назначаю показатель 2, а между средним + 1sd и средним + 2sd, 1 и т. Д. Я знаю, что это может быть сделано, если и еще. Но когда разделов слишком много, код кажется слишком длинным. Существуют ли простые и лаконичные методы для достижения этой цели?
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 дней, что означает, что мне нужно масштабировать данные дня t на основе последних 20 дней (день t-20 - день t-1) и назначать те же значения, что и выше в соответствии с его z баллом. Можно ли в этом случае использовать функцию резки? Я написал код с циклом, и если предложения
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
}