[英]using for loops and dplyr
所以我有一个名为 Swine_flu_cases 的数据框,它看起来如下(只是一个摘录):
Swine_flu_cases <- read.table(text = "Country Date Confirmed
1 Egypt 2020-01-22 0
2 Egypt 2020-01-23 1
3 Algeria 2020-01-24 1
4 France 2020-01-25 1
5 Zambia 2020-01-26 1
6 Congo 2020-01-27 1", header =TRUE)
我想创建一个名为“days_since_first_case”的新变量,它应该是一个数字向量,它将从该国首次确诊猪流感病例时减去当前日期。
这是我用来创建新变量的代码:
Swine_flu_cases %>%
filter(Confirmed ==1) %>%
group_by(Country) %>%
mutate(days_since_first_case = Date - min(Date))
这段代码的问题是它只给我确认等于 1 的行并采用该最小日期,如果我删除过滤器,它只需要国家的最小日期并从中减去每个日期。
我不知道我是否应该为此添加一个 for 循环,我不熟悉 for 循环就是我选择使用这种方法的原因。
任何帮助或建议将不胜感激。
我建议这种方法重用你的一些代码:
library(dplyr)
#Format
Swine_flu_cases %>% mutate(Date=as.Date(Date)) -> Swine_flu_cases
#Code
Swine_flu_cases %>%
left_join(Swine_flu_cases %>%
filter(Confirmed ==1) %>%
group_by(Country) %>%
summarise(DateFirstCase = min(Date))) %>%
mutate(DaysSinceFirstCase=DateFirstCase-Date)
输出:
Country Date Confirmed DateFirstCase DaysSinceFirstCase
1 Egypt 2020-01-22 0 2020-01-23 1 days
2 Egypt 2020-01-23 1 2020-01-23 0 days
3 Algeria 2020-01-24 1 2020-01-24 0 days
4 France 2020-01-25 1 2020-01-25 0 days
5 Zambia 2020-01-26 1 2020-01-26 0 days
6 Congo 2020-01-27 1 2020-01-27 0 days
请让我知道这是否是您想要的,因为我也对您想要的输出感到困惑。
不需要 for 循环。 您可以轻松使用您拥有的代码,但日期仅在有案例时显示:
Swine_flu_cases %>%
group_by(Country) %>%
mutate(
case_date = ifelse(Confirmed == 1, Date, NA),
days_since_first_case = Date - min(case_date)
) %>%
ungroup()
这是一种获取自某个国家首次发现病例以来的天数的方法。 我认为 Confirmed 是案例数,因此我过滤了一个或多个案例。 为了测试,我更改了您的示例代码,并为埃及制作了更多案例和天数。
library(lubridate)
Swine_flu_cases <- read.table(text = "Country Date Confirmed
1 Egypt 2020-01-22 0
2 Egypt 2020-01-23 1
3 Egypt 2020-01-24 5
4 Egypt 2020-01-25 7
5 Zambia 2020-01-26 1
6 Congo 2020-01-27 1", header =TRUE)
Swine_flu_cases %>%
mutate(Date = ymd(Date)) %>%
filter(Confirmed >= 1) %>%
group_by(Country) %>%
mutate(days_since_first_case = as.numeric(difftime(Date, min(Date), units = "days"))) %>%
ungroup()
# A tibble: 5 x 4
Country Date Confirmed days_since_first_case
<chr> <date> <int> <dbl>
1 Egypt 2020-01-23 1 0
2 Egypt 2020-01-24 5 1
3 Egypt 2020-01-25 7 2
4 Zambia 2020-01-26 1 0
5 Congo 2020-01-27 1 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.