【发布时间】:2020-08-11 08:50:43
【问题描述】:
我正在根据 mdo 值对数据进行分组并计算这些值的实例。 然后我使用之前的计数进行一些计算。
library(tidyverse)
library(dplyr)
df <- tibble(mydate = as.Date(c("2019-05-11 23:01:00", "2019-05-11 23:02:00", "2019-05-11 23:03:00", "2019-05-11 23:04:00",
"2019-05-12 23:05:00", "2019-05-12 23:06:00", "2019-05-12 23:07:00", "2019-05-12 23:08:00",
"2019-05-13 23:09:00", "2019-05-13 23:10:00", "2019-05-13 23:11:00", "2019-05-13 23:12:00",
"2019-05-14 23:13:00", "2019-05-14 23:14:00", "2019-05-14 23:15:00", "2019-05-14 23:16:00",
"2019-05-15 23:17:00", "2019-05-15 23:18:00", "2019-05-15 23:19:00", "2019-05-15 23:20:00",
"2019-05-15 23:21:00", "2019-05-15 23:22:00", "2019-05-15 23:23:00", "2019-05-15 23:24:00",
"2019-05-15 23:25:00")),
mdo = c(1500, 1500, 1500, 1500,
1500, 1500, NA, 0,
0, 0, NA, NA, NA, NA, 1100, 1100,
1100, 200, 200, 200,200,
1100, 1100, 1100, 0
))
#Create a group number
df1 <- df %>% mutate(grp = data.table::rleid(mdo))
df1 <- df1 %>%
#Keep only non-NA value
filter(!is.na(mdo)) %>%
#count occurence of each grp
count(grp, name = 'count') %>%
#Shift the count to the previous group
mutate(count = lag(count)) %>%
#Join with the original data
right_join(df1, by = 'grp')
现在,它计数为零。我不想数零,但我想将它们放在不同的组中。
我想要类似的东西:
count(ifelse(mdo != 0, grp, NA), name='count') %>%
但这给出了:
Error: by can't contain join column grp which is missing from LHS
现在的结果是:
grp count mydate mdo
<int> <int> <date> <dbl>
1 1 NA 2019-05-11 1500
2 1 NA 2019-05-11 1500
3 1 NA 2019-05-11 1500
4 1 NA 2019-05-11 1500
5 1 NA 2019-05-12 1500
6 1 NA 2019-05-12 1500
7 2 NA 2019-05-12 NA
8 3 6 2019-05-12 0
9 3 6 2019-05-13 0
10 3 6 2019-05-13 0
11 4 NA 2019-05-13 NA
12 4 NA 2019-05-13 NA
13 4 NA 2019-05-14 NA
14 4 NA 2019-05-14 NA
15 5 3 2019-05-14 1100
16 5 3 2019-05-14 1100
17 5 3 2019-05-15 1100
18 6 3 2019-05-15 200
19 6 3 2019-05-15 200
20 6 3 2019-05-15 200
21 6 3 2019-05-15 200
22 7 4 2019-05-15 1100
23 7 4 2019-05-15 1100
24 7 4 2019-05-15 1100
25 8 3 2019-05-15 0
我想要的结果:
grp count mydate mdo
<int> <int> <date> <dbl>
1 1 NA 2019-05-11 1500
2 1 NA 2019-05-11 1500
3 1 NA 2019-05-11 1500
4 1 NA 2019-05-11 1500
5 1 NA 2019-05-12 1500
6 1 NA 2019-05-12 1500
7 2 NA 2019-05-12 NA
8 3 6 2019-05-12 0
9 3 6 2019-05-13 0
10 3 6 2019-05-13 0
11 4 NA 2019-05-13 NA
12 4 NA 2019-05-13 NA
13 4 NA 2019-05-14 NA
14 4 NA 2019-05-14 NA
15 5 NA 2019-05-14 1100
16 5 NA 2019-05-14 1100
17 5 NA 2019-05-15 1100
18 6 3 2019-05-15 200
19 6 3 2019-05-15 200
20 6 3 2019-05-15 200
21 6 3 2019-05-15 200
22 7 4 2019-05-15 1100
23 7 4 2019-05-15 1100
24 7 4 2019-05-15 1100
25 8 3 2019-05-15 0
【问题讨论】:
-
您能否展示给定示例的预期输出?
-
@RonakShah:我更新了帖子,谢谢
-
所以
count仅在第 5 组中被更改。为什么第 5 组中的count应该是NA? -
@RonakShah:因为稍后当我将 1100 除以计数时,如果我将其保留为 3 个计数,它将进行除法。但是,因为 mdo 为零,我希望不发生除法,我想在那里设置零。 (当然这是个问题,怎么设置为零)
-
mdo在第 5 组中不是 0,而是 1100。