【发布时间】:2020-10-18 23:03:25
【问题描述】:
我正在处理包含无数行的大型数据集,并且正在尝试自动化我的一些分析。我主要使用#tidyverse 来减少添加更多包的需要,但我愿意接受所有建议。考虑以下小标题:
id <- rep(1:3, each = 48) # 3 individuals
time <- rep(seq(0, 23.5, by = .5), 3)
count <- runif(48*3)
df <- tibble(id, time, count)
我正在尝试过滤最大计数时间前后的 2 小时间隔。 我可以使用以下方法确定最大计数的时间:
df %>%
group_by(id) %>%
filter(count == max(count))
# OR
df$time[which.max(df$count)] # Only for 1 id, though
我正在努力过滤最大计数时间附近的范围。我可以使用 Base R 将时间正确识别为向量,但我无法过滤整行。我还没有为潜在的负值或缺失值做好准备。
df$time[(which.max(df$count) - 2):(which.max(df$count) + 2)]
我正在使用 mutate() 计算几个不同的变量,因此我想将此 filter() 合并到管道中。我尝试使用 between()、match()、lead() 和 lag()。 which.max() 是我最接近过滤正确持续时间的方法。以下是死胡同,也是我最接近、正确的尝试:
# Listed max(count) in a new column; maybe use for matching?
df %>%
group_by(id) %>%
mutate(peak = max(count))
# Partially selects time around max count, but not accurately.
df %>%
group_by(id) %>%
filter(time == time[(which.max(count) - 1.5):(which.max(count)+1.5)])
我已经编写了大约一年的代码,但我认为我缺少一些我不知道的基本功能。已经针对 SQL 发布了类似的问题,但我没有找到任何关于 R 或 tidyverse 的问题。如果您能提供帮助,我将不胜感激。让我知道是否需要任何说明。
【问题讨论】:
-
@akrun 小错误,但我修正了!