R dplyr条件和与变异
R dplyr conditional sum with mutate
我目前有以下格式的数据集
id, date, category, city
1, 2016-01-01, A CityA
2, 2016-01-01, B CityA
等
我正在尝试使用 mutate,以便它可以在过去 30 天或 x 时间范围内为我提供有条件的 运行 计数。
开始我尝试使用它来查看它是否有效并从那里扩展它
mutate(df, last_thirty_day_count = sum(df$id < id & df$city == city))
但它只给了我零。
感谢任何帮助。
首先,这是一个稍长的示例数据集
set.seed(8675309)
sampleData <-
data_frame(id = 1:20
, date = seq(as.Date("2017-01-01")
, as.Date("2017-01-20")
, by = "day")
, category = sample(LETTERS[1:3], 20, TRUE)
, city = sample(letters[1:3], 20, TRUE)
)
然后,只需决定什么算作合格观察。从你的问题中不清楚你想使用什么切断。在这里,我使用 1 月 4 日作为截止日期,但您可以使用适合您情况的任何日期。然后,group_by
您要计算的变量,然后将它们相加即可。这假设它们是有序的,如果它们不是,请确保先 arrange
它们。
sampleData %>%
mutate(QualifiyingObs = date > "2017-01-04") %>%
group_by(city) %>%
mutate(CountOfQual = cumsum(QualifiyingObs))
给予
id date category city QualifiyingObs CountOfQual
<int> <date> <chr> <chr> <lgl> <int>
1 1 2017-01-01 A a FALSE 0
2 2 2017-01-02 B c FALSE 0
3 3 2017-01-03 C c FALSE 0
4 4 2017-01-04 C a FALSE 0
5 5 2017-01-05 A b TRUE 1
6 6 2017-01-06 C c TRUE 1
7 7 2017-01-07 C a TRUE 1
8 8 2017-01-08 C a TRUE 2
9 9 2017-01-09 C a TRUE 3
10 10 2017-01-10 B c TRUE 2
11 11 2017-01-11 C c TRUE 3
12 12 2017-01-12 B c TRUE 4
13 13 2017-01-13 B a TRUE 4
14 14 2017-01-14 A b TRUE 2
15 15 2017-01-15 C a TRUE 5
16 16 2017-01-16 C b TRUE 3
17 17 2017-01-17 C b TRUE 4
18 18 2017-01-18 A b TRUE 5
19 19 2017-01-19 C a TRUE 6
20 20 2017-01-20 C c TRUE 5
我目前有以下格式的数据集
id, date, category, city
1, 2016-01-01, A CityA
2, 2016-01-01, B CityA
等
我正在尝试使用 mutate,以便它可以在过去 30 天或 x 时间范围内为我提供有条件的 运行 计数。
开始我尝试使用它来查看它是否有效并从那里扩展它
mutate(df, last_thirty_day_count = sum(df$id < id & df$city == city))
但它只给了我零。
感谢任何帮助。
首先,这是一个稍长的示例数据集
set.seed(8675309)
sampleData <-
data_frame(id = 1:20
, date = seq(as.Date("2017-01-01")
, as.Date("2017-01-20")
, by = "day")
, category = sample(LETTERS[1:3], 20, TRUE)
, city = sample(letters[1:3], 20, TRUE)
)
然后,只需决定什么算作合格观察。从你的问题中不清楚你想使用什么切断。在这里,我使用 1 月 4 日作为截止日期,但您可以使用适合您情况的任何日期。然后,group_by
您要计算的变量,然后将它们相加即可。这假设它们是有序的,如果它们不是,请确保先 arrange
它们。
sampleData %>%
mutate(QualifiyingObs = date > "2017-01-04") %>%
group_by(city) %>%
mutate(CountOfQual = cumsum(QualifiyingObs))
给予
id date category city QualifiyingObs CountOfQual
<int> <date> <chr> <chr> <lgl> <int>
1 1 2017-01-01 A a FALSE 0
2 2 2017-01-02 B c FALSE 0
3 3 2017-01-03 C c FALSE 0
4 4 2017-01-04 C a FALSE 0
5 5 2017-01-05 A b TRUE 1
6 6 2017-01-06 C c TRUE 1
7 7 2017-01-07 C a TRUE 1
8 8 2017-01-08 C a TRUE 2
9 9 2017-01-09 C a TRUE 3
10 10 2017-01-10 B c TRUE 2
11 11 2017-01-11 C c TRUE 3
12 12 2017-01-12 B c TRUE 4
13 13 2017-01-13 B a TRUE 4
14 14 2017-01-14 A b TRUE 2
15 15 2017-01-15 C a TRUE 5
16 16 2017-01-16 C b TRUE 3
17 17 2017-01-17 C b TRUE 4
18 18 2017-01-18 A b TRUE 5
19 19 2017-01-19 C a TRUE 6
20 20 2017-01-20 C c TRUE 5