Как заменить выбросы с NA в R из вектора, созданного с помощью boxplot () $ out - PullRequest
0 голосов
/ 05 марта 2019

Я хотел бы знать, как заменить выбросы на «NA» в R, предполагая, что эти выбросы хранятся в векторе, созданном с помощью boxplot () $ out.

Например:

# create a data frame
df <- data.frame(Group = c("Group1", "Group1", "Group2", "Group2", "Group3", "Group3", "Group4", "Group4", "Group5", "Group5"), 
                 Value1 = c(48, 2, -130, 62, 3, 2, 8, 120, 2, 4), 
                 Value2 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
> df
    Group Value1 Value2
1  Group1     48      1
2  Group1      2      2
3  Group2   -130      3
4  Group2     62      4
5  Group3      3      5
6  Group3      2      6
7  Group4      8      7
8  Group4    120      8
9  Group5      2      9
10 Group5      4     10

# plot the data frame
boxplot(df$Value1)

# create a vector of outliers for the numeric factor
outliers <- boxplot(df$Value1, plot = FALSE)$out

# view outliers
outliers
[1] -130  120

Я следовал инструкциям, перечисленным здесь на RPub , чтобы пройти этот путь.Теперь я хотел бы заменить выбросы на «NA» вместо того, чтобы полностью удалить строки, в которых они находятся, чтобы я мог сохранить данные в строках, соответствующих выбросам, из других столбцов, которые не являются выбросами в их соответствующих факторах (то есть 3 и8 в Value2).Я предполагаю, что which и %in% придут сюда играть, но я застрял.

Мне нужно знать, как заменить значения на NA, так чточто позже я смогу объединить данные из той же строки в другом столбце (а также данные из разных строк в одном столбце).

Я хотел бы заменить выбросы на NA, чтобы кадр данных выглядел примерно такэто:

> df
    Group Value1 Value2
1  Group1     48      1
2  Group1      2      2
3  Group2     NA      3
4  Group2     62      4
5  Group3      3      5
6  Group3      2      6
7  Group4      8      7
8  Group4     NA      8
9  Group5      2      9
10 Group5      4     10

Я относительно новичок в программировании на R.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Полагаю, я понял это с помощью базового решения R.

# Replace the values with NA
df[df$Value1 %in% outliers, "Value1"] = "NA"

Это заменяет выбросы, сохраненные в векторе outliers, на NA.Тем не менее, он также изменяет столбец на character объект.Мне нужно изменить его обратно на числовой.

# Change column back to `numeric`
df$Value1 <- as.numeric(df$Value1)

Вуаля.Проблема решена.

0 голосов
/ 05 марта 2019

Я думаю, что было бы лучше вместо замены значений добавить новый столбец, который указывает, являются ли эти значения выбросами (1) или нет (0).

Один базовый способ R сделать это:

df$is_outlier <- ifelse(df$Value1 %in% boxplot.stats(df$Value1)$out, 1, 0)

Результат:

    Group Value1 Value2 is_outlier
1  Group1     48      1          0
2  Group1      2      2          0
3  Group2   -130      3          1
4  Group2     62      4          0
5  Group3      3      5          0
6  Group3      2      6          0
7  Group4      8      7          0
8  Group4    120      8          1
9  Group5      2      9          0
10 Group5      4     10          0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...