【发布时间】:2018-03-02 15:29:13
【问题描述】:
我有一个 df
set.seed(123)
df <- data.frame(loc.id = rep(1:9, each = 9), month = rep(1:9,times = 9),
x = runif(81, min = 0, max = 5))
这是一个有 9 个位置的数据框。对于每个位置,我有 9 个月,每个月都有一个 x 值。
对于每个位置,我想根据以下条件选择一个月:
1) 检查哪些月份(不包括第 9 个月)的 x > 1,然后选择最接近第 9 个月的月份。 例如,如果对于位置 1,x 的值为
4.56, 3.41, 0.82, 2.31, 3.75, 4.75, 1.22, 2.98, 1.17
那么第 1、2、4、5、6、7、8 个月的 x > 1 并且从这些月份中,第 8 个月最接近第 9 个月。因此将选择第 8 个月
2) 如果没有一个月份的 x > 1,则只需选择具有最高 x 值的月份。例如:
如果对于一个位置,x 是
0.8, 0.6, 0.95, 0.4, 0.88, 0.7, 0.6, 0.45, 0.3
然后将选择第 3 个月 (x = 0.95)
我试过了:
library(dplyr)
df %>% filter(month != 9) %>% # removes the 9 month so that only the 8 months are evaluated
group_by(loc.id) %>%
mutate(select.month = x > 1) %>% # mark those months where x > 1
filter(select.month == TRUE) %>% # select those months where x > 1 is true
mutate(dif = 9 - month) %>%# subtract each month from 9 to check which one is closest to 9
summarise(month.id = min(dif)) # select the months which is closest to month 9
但是,在上述功能中,我无法检查所有月份都有的位置 值小于 1。我的问题是如何更改上面的代码以在 x 都不是 > 1 时也检查条件 2
【问题讨论】:
标签: r if-statement dplyr data.table