【发布时间】:2020-02-27 07:33:38
【问题描述】:
我对 R 比较陌生,我使用老式的 for 循环。我试图通过使用 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 的 TRUE 值中。为了说明,我希望我的最终数据框有点像这样:
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*))
最好的方法是什么?谢谢!
【问题讨论】: