Я довольно плохо знаком с R и использую старую школу для -l oop. Я пытаюсь кодировать более эффективно, используя dplyr, чтобы ускорить обработку моих данных, но я когда-либо путаюсь со списками. У меня есть простой набор данных ниже:
df <- data_frame(group = sort(rep(1:3, 20)),
values = signif(runif(60), 2),
thresh = ifelse(values > 0.6, TRUE, FALSE))
df %>% group_by(group) %>% group_map(~which(.$thresh == TRUE))
Из вывода group_map()
выше, как мне, 1.) создать новый столбец, который содержит имена строк только thresh == TRUE
, а остальные NA и 2.) создайте еще один столбец, который содержит максимальное значение среди ИСТИННЫХ значений из thresh
. Чтобы проиллюстрировать это, я хочу, чтобы мой окончательный кадр данных был примерно таким:
group values thresh idex max
1 1 0.77 TRUE 1 NA
2 1 0.32 FALSE NA NA
3 1 0.06 FALSE NA NA
4 1 0.33 FALSE NA NA
5 1 0.51 FALSE NA NA
6 1 0.053 FALSE NA NA
7 1 0.92 TRUE 7 0.92
8 1 0.44 FALSE NA NA
...
...
Я думал о создании кода, но застрял после group_map
:
dff %>% group_by(group) %>%
group_map(~which(.$thresh == TRUE)) %>%
mutate(idex = *row_names_in_the_column_blank_are_NA*,
max = max(*values_from_the_indices*))
Что такое лучший способ сделать это? Спасибо!