Вы также можете использовать sapply
и quantile
из base R
и stats
Инициализировать ваш data.frame:
df <- data.frame(Year =c(1991, 1991, 1992, 1992), Month = c(1, 2, 1, 2), Price = c(10, 11, 23, 22), Volume = c(300, 320, 310, 302), Return = c(1.2, 1.3, 2.1, 2.3), StockCode= c('AAPL', 'AAPL', 'AMZN', 'AMZN'))
Сделать фиктивные переменные:
dummy <- data.frame(sapply(df[c('Price', 'Volume', 'Return')], function(x) {
y <- quantile(x, probs=c(0.3, 0.7), type = 7) #0.3 and 0.7 are your cut-off percentiles
ifelse(x < y[1], -1, ifelse(x < y[2], 0, 1))
}
))
Свяжите dummy
с другими интересующими вас столбцами и переименуйте столбцы, чтобы получить то, что вы хотите:
result_df <- cbind(df[c('Year', 'Month')], dummy, df['StockCode'])
colnames(result_df)[2:4] <- paste0('D_', colnames(df)[2:4])
result_df
Year D_Month D_Price D_Volume Return StockCode
1 1991 1 -1 -1 -1 AAPL
2 1991 2 0 1 0 AAPL
3 1992 1 1 0 0 AMZN
4 1992 2 0 0 1 AMZN
Надеюсь, это поможет!