Я все еще изучаю R. У меня есть фрагмент кода, и я хотел бы узнать, как сделать его более кратким для моей будущей работы:
test <- function (x,logical) {
if (logical == FALSE) {
return (NA)
} else{
return (x)
}
}
merged_dataframe2 <- merge(merged_dataframe, dataframe, by = "dmt") %>%
rowwise() %>%
mutate(MaxFlow_logical = case_when(((MaxFlow < (MaxFlow_q1 - MaxFlow_iqr)) | (MaxFlow > (MaxFlow_q3 + MaxFlow_iqr))) ~ FALSE,
TRUE ~ TRUE),
Morning_mean_logical = case_when(((Morning_mean < (Morning_mean_q1 - Morning_mean_iqr)) | (Morning_mean > (Morning_mean_q3 + Morning_mean_iqr))) ~ FALSE,
TRUE ~ TRUE),
Afternoon_mean_logical = case_when(((Afternoon_mean < (Afternoon_mean_q1 - Afternoon_mean_iqr)) | (Afternoon_mean > (Afternoon_mean_q3 + Afternoon_mean_iqr))) ~ FALSE,
TRUE ~ TRUE),
Evening_mean_logical = case_when(((Evening_mean < (Evening_mean_q1 - Evening_mean_iqr)) | (Evening_mean > (Evening_mean_q3 + Evening_mean_iqr))) ~ FALSE,
TRUE ~ TRUE),
Morn_cons_logical = case_when(((Morn_cons < (Morn_cons_q1 - Morn_cons_iqr)) | (Morn_cons > (Morn_cons_q3 + Morn_cons_iqr))) ~ FALSE,
TRUE ~ TRUE),
Eve_cons_logical = case_when(((Eve_cons < (Eve_cons_q1 - Eve_cons_iqr)) | (Eve_cons > (Eve_cons_q3 + Eve_cons_iqr))) ~ FALSE,
TRUE ~ TRUE),
min_night_flow_logical = case_when(((min_night_flow < (min_night_flow_q1 - min_night_flow_iqr)) | (min_night_flow > (min_night_flow_q3 + min_night_flow_iqr))) ~ FALSE,
TRUE ~ TRUE),
mean_night_flow_logical = case_when(((mean_night_flow < (mean_night_flow_q1 - mean_night_flow_iqr)) | (mean_night_flow > (mean_night_flow_q3 + mean_night_flow_iqr))) ~ FALSE,
TRUE ~ TRUE),
Morning_mean = test(Morning_mean,Morning_mean_logical),
Afternoon_mean = test(Afternoon_mean,Afternoon_mean_logical),
Evening_mean = test(Evening_mean,Evening_mean_logical),
Morn_cons = test(Morn_cons,Morn_cons_logical),
Eve_cons = test(Eve_cons,Eve_cons_logical),
min_night_flow = test(min_night_flow,min_night_flow_logical),
mean_night_flow = test(mean_night_flow,mean_night_flow_logical))
Можно ли использовать mutate_at, чтобы сделать это более кратким?
Я использовал case_when для вывода логических столбцов. Есть ли способ объединить эти шаги, чтобы не создавать логические столбцы. Примерно так:
MaxFlow_logical = case_when(((MaxFlow < (MaxFlow_q1 - MaxFlow_iqr)) | (MaxFlow > (MaxFlow_q3 + MaxFlow_iqr))) ~ NA, TRUE ~ MaxFlow)
Однако это не работает, есть ли альтернатива?