2016-10-26 4 views
1

Итак, я делаю обнаружение outlier для данного набора данных. Кстати, это делается в R.Создание новой переменной для тега outlier

С помощью функции boxplot.stats (x) $ out я получаю информацию для переменной, для которой я обнаруживаю отклонения. Правильно? Я получаю значение наблюдения, которое считается выбросом.

Что я хочу сделать, так это создать новый столбец в наборе данных, который может быть двоичным и поставить 1 для наблюдений, которые являются выбросами, и 0 для тех, которые не являются выбросами.

Пример:

Var1 Var2 
asd 111 
dsa 15 
ssa 10 
aas 9 
dad 10 
dda 95 

Допустим, наблюдение 1 и 6 обнаружен как выброс:

Var1 Var2 
asd 111 
dda 95 

Когда я использую:

outlier <- boxplot.stats(Var2)$out 

Я только получить значение из выбросы - я получаю 111 и 95 в консоли. Так .. После того, как я обнаружил эти выбросы я хочу сделать следующее:

Var1 Var2 Outlier 
asd 111 1 
dsa 15  0 
ssa 10  0 
aas 9  0 
dad 10  0 
dda 95  1 

Это, вероятно, очень легко сделать, но я не знаю, как. Есть идеи?

ответ

1

сказать ваше имя data.frame является «данными», и у вас есть значение выбросов в «выбросе»

затем сделать это:

data$outlier = 0 

data[which(data$Var2 %in% outlier),"outlier"] <- 1 
+0

Их, спасибо! Действительно элегантное решение! –

0

Вы можете попробовать следующее:

require(data.table) 

data <- fread('Var1 Var2 
asd 111 
dsa 15 
ssa 10 
aas 9 
dad 10 
dda 95 ') 

outliers <- fread('Var1 Var2 
asd 111 
dda 95 ') 

data[, Outlier:= ifelse(paste(Var1, Var2) %in% paste(outliers$Var1, outliers$Var2), 1, 0)] 
0

Вы можете использовать min() значений в boxplot.stats(Var2)$out, чтобы вычислить новую переменную через ifelse().

Предположим data Ваш dataframe:

data$outliers <- ifelse(data$Var2 < min(boxplot.stats(data$Var2)$out), 0, 1) 

Таким образом, вам не нужно сохранять значения выбросов в другом резервированной объект первым.

0

Если у вас есть выброс в вашем векторе как

outlier <- c(111,90) 

Вы можете использовать в функции для подмножества двоичных переменного с помощью функции IfElse

within(df,outlier <- ifelse(df$var1%in%outlier,1,0)) 

var1 var2 outlier 
1 111 asd  1 
2 10 csd  0 
3 11 pud  0 
4 12 dud  0 
5 90 kud  1 
Смежные вопросы