【问题标题】:How can I loop over each row in R and see if a condition is met to change the format of a date?如何遍历 R 中的每一行并查看是否满足更改日期格式的条件?
【发布时间】:2020-04-23 02:56:06
【问题描述】:

我有两个数据框 A 和 B

A 的日期格式为 yyyy-mm-dd

B 的日期格式为 mm/dd/yyyy

请注意,B 混合了日期和“控制”一词,因为并非所有日期 已填充(有些是本研究的对照,没有日期)

我需要 B 的日期看起来像 A,以便在我正在做的另一部分匹配日期相等的地方,并且由于它们的格式不同,我无法将它们等同起来。

我试着说 if date != 'control' 然后格式化日期,或者为每一行做一个 for 循环,但我什么都做不了。

我应该如何处理这个问题?

谢谢!

【问题讨论】:

    标签: r loops date format


    【解决方案1】:

    我们可以使用anydate自动将两个数据集中的日期格式化为Date

    library(anytime)
    A$date <- anydate(A$date)
    B$date <- anydate(B$date)
    

    或者在base R,我们可以使用正确的format

    A$date <- as.Date(A$date, format = "%Y-%m-%d")
    B$date <- as.Date(B$date, format = "%m/%d/%Y")
    

    请注意,如果有任何不是标准日期格式的值,即任何字符串,则该元素将导致 NA。然后我们可以使用is.na 过滤掉这些值或者改变它


    如果我们想通过排除带有“控制”的行来子集数据

    i1 <- A$date != 'control'
    as.Date(A$date[i1], format = "%Y-%m-%d")
    

    同样可以对“B”进行子集化,但这并不是真正需要的,因为NA 更容易操作

    【讨论】:

    • 我不能 as.date 因为有些行说“控制”并且不是日期,所以它会出错。我想我需要遍历每个
    • @Love 它不会导致错误,只需给NAas.Date(c("2019-05-01", "control"))# [1] "2019-05-01" NA,然后您可以删除NA或使用is.na创建逻辑输出
    猜你喜欢
    • 2020-03-07
    • 2021-05-25
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2020-01-09
    相关资源
    最近更新 更多