У меня есть фрейм данных с именем df из 200+ переменных с 300 000+ наблюдений (200+ столбцов, 300000+ строк)
Конечная цель моего R-кода - найти выбросы каждогостолбец и заменить их определенным значением, скажем, NA.Если значение уже равно NA, пропустите и перейдите к следующему циклу
for (j in 1:ncol(df)){
outnumtext <- paste0('out_value <- boxplot.stats(df$',colnames(df[j]),')$out')
eval(parse(text=outnumtext))
for (k in 1:nrow(df)){
replacetext <- paste0('
if ((df[',k,',',j,'] %in% out_value) & !(is.na(df[',k,',',j,']))) {
df[',k,',',j,'] <- NA
} else if (is.na(df[',k,',',j,'])) {
next
} else {
next
}')
eval(parse(text=replacetext))
}
}
Я обнаружил, что использование цикла for в r и циклическое прохождение всех строк в каждом столбце значительно замедляетБег.Есть ли альтернативы этому?
Заранее большое спасибо!
Редактировать P / S: Настоящий кодекс не просто заменяет выбросы NA, но имеет несколько способов борьбы на основенесколько условий (где if & if else условия будут выполнены соответственно).Однако моя цель - найти возможную альтернативу в сокращении времени выполнения, поэтому я постарался максимально упростить свой исходный код, чтобы добраться до основного момента