Я работаю с большим фреймом данных (df). Я хотел бы рассчитать выбросы для определенного c подмножества столбцов на основе среднего значения + 3 SD.
Сначала я извлек нужные столбцы, поэтому все имена столбцов окрашены в цвет.
colors = colnames(df)[grep('color', colnames(df))]
Я не уверен, как мне тогда go сделать цикл, чтобы вычислить выбросы по всем столбцам, используя эту новую переменную. У меня была формула:
# id those with upper outliers
uthr = mean(df$color)+3*sd(df$color)
rm_u_ids = df$id[which(df$color >= uthr)]
# id those with lower outliers
lthr = mean(df$color)-3*sd(df$color)
rm_l_ids = df$id[which(df$color <= lthr)]
# remove those with both upper and lower outliers
rm_ids = sort(c(rm_u_ids, rm_l_ids))
df_2 = df %>% filter(!id %in% rm_ids)
Теперь актуальная проблема. Я хотел бы использовать что-то подобное, чтобы сделать следующее: 1) для каждого цвета в colors
, идентифицируйте эти идентификаторы с выбросами, возможно, сохраните эту информацию в другом месте, 2) используя эту информацию (возможно, в списке или отдельном фрейме данных), идентифицируйте идентификаторы, появившиеся в 5 или более столбцах, или colors
, 3) подставьте в исходный фрейм данных этот список, чтобы мы исключили эти идентификаторы с выбросами в 5 или более цветовых столбцах.
Имеет ли это смысл ? Я не уверен, что al oop также рекомендуется для этой проблемы.
Спасибо и извините, если я сделал это звучит более сложно, чем должно быть!