【问题标题】:For looping over dates用于循环日期
【发布时间】:2020-12-26 02:30:03
【问题描述】:

所以我有一个名为 Swine_flu_cases 的数据框,如下所示(只是摘录):

    Country    Date        Confirmed     
1   Canada  2020-01-22         1                            
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      

             

该数据集着眼于一个国家在特定日期记录的猪流感病例数量。

我已经过滤了我的数据以仅显示确诊病例为 1 的变量,并且还按不同的国家/地区对其进行了分组,并按日期升序对其进行了排序。 (我这样做是为了得到这些国家各自出现首例病例的日期)

我已按日期升序对其进行排序,因为我想提取每个国家首次记录猪流感病例的时间并将其存储为向量。

我尝试过使用以下代码:

first_case_date = as.Date(data.frame(Swine_flu_cases$Date))

不过,这给了我一个错误。

as.Date.default(data.frame(Swine_flu_cases$Date)) 中的错误:做 不知道如何将 'data.frame(Swine_flu_cases$Date)' 转换为类 “日期”

我想要做的是创建一个新变量Swine_flu_cases$days_since_first_case,它将首先获取我列表中每个国家/地区的存储日期,然后从每个国家/地区的所有其他日期中减去该日期。

我对 for 循环的了解非常基础,但我知道我需要为此使用 for 循环。我最近也熟悉了超前和滞后函数,并在想也许有一种方法可以结合这两个函数来创建这个变量?

如果有人能给我一个大致的想法,我将如何去做,我将不胜感激。

【问题讨论】:

  • 来自帮助:as.Date 方法接受字符串、因子、逻辑 NA 和类“POSIXlt”和“POSIXct”的对象。您正在尝试将数据框传递给它并且它抱怨它。也更好地定义日期格式。试试看:first_case_date <- as.Date(Swine_flu_cases$Date, format = "%Y-%m-%d")

标签: r loops lag lead


【解决方案1】:

您可以使用 dplyrlubridate 执行此操作,以使您的日期正常运行。

library(dplyr)
library(lubridate)
Swine_flu_cases %>% 
  mutate(Date = ymd(Date) %>%  # makes the Dates behave better for subtraction
  group_by(Country) %>%        # You want grouped by country
  mutate(days_since_first_case = Date - min(Date)) 
    # subtracts the first date in each group from the current date for the row)

【讨论】:

  • 我试过了,但是带有变量的日期与实际的最短日期不对应,但我看到了这段代码是如何工作的,我只是想找到一种方法来获取每个日期的最短日期确诊病例数为一而不是零时的国家。非常感谢您的洞察力。
猜你喜欢
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
相关资源
最近更新 更多