Пока я преобразовывал данные из фрейма данных в R (Rstudio), я хотел присвоить значения NA указанному столбцу, если число находится в списке. Этот список (я полагаю, что это список) происходит от boxplot.stats(x)$out.
Вот что я сделал, чтобы получить переменную со списком чисел из диаграммы:
age_outofrange <- boxplot.stats(census$age)$out
И это то, что я закодировал. Я использовал метод unique(x), потому что некоторые эпохи повторялись:
census["age"][census["age"] == unique(age_outofrange), ] <- NA
перепись -> фрейм данных
возраст -> целевой столбец
Это пример моего текущего фрейма данных:
index|age
1|34
2|79
3|80
4|23
5|650
6|44
7|560
8|12
9|65
10|79
Это то, что я ожидаю (я пишу новый csv и ничего не происходит):
index|age
1|34
2|NA
3|NA
4|23
5|NA
6|44
7|NA
8|12
9|65
10|NA
Поэтому я подставил значения: 79, 80, 650 и 560, которые являются значениями из age_outofrange. Я также попробовал что-то вроде следующего кода, но ничего не произошло (или, по крайней мере, то, что показал мне csv). Несколько значений были изменены, но подавляющее большинство не изменилось:
df <- df$column[-listvalue, ]
Вы знаете, как правильно кодировать? Спасибо за ваши ответы!
Возможно, нам понадобится использовать [[
, чтобы извлечь столбец как vector
. Кроме того, ==
можно заменить на %in%
, если length
из unique
элементов в 'age_outofrange' больше 1.
census[["age"]][census[["age"]] %in% unique(age_outofrange)] <- NA
-выход
> census
index age
1 1 34
2 2 NA
3 3 NA
4 4 23
5 5 NA
6 6 44
7 7 NA
8 8 12
9 9 65
10 10 NA
census <- structure(list(index = 1:10, age = c(34L, 79L, 80L, 23L, 650L,
44L, 560L, 12L, 65L, 79L)), class = "data.frame", row.names = c(NA,
-10L))
age_outofrange <- c(79, 80, 650, 560)
Большое спасибо @akrun!! Вот оно. Я не знал об использовании [[ ]] или функции %in%. Я новичок в этом языке. Большое вам спасибо за вашу помощь!