指定特定日期显示在R中的列

yqhsw0fo  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(117)

我在 Dataframe (下面的dput代码块)中有一个数据子集,其中包含 Storm 发生的日期(“Date_AR”)。我想通过确定“Date_N”和/或“Date_S”列中是否发生了相同的日期来了解 Storm 是发生在北方、南方还是两者。
例如,在“Date_AR”列中,第一个日期是1989年1月17日。在“地点”列中,我希望打印“S”,因为此日期在“Date_S”列中。如果“Date_N”和“Date_S”中出现1989年4月5日,则我希望在“地点”列中打印“B”(两者都有)。
提前感谢你的帮助!如果这种类型的问题已经存在,我道歉。我可能不知道要搜索的关键字。

structure(list(Date_S = structure(c(6956, 6957, 6970, 7008, 7034, 
    7035, 7036, 7172, 7223, 7224, 7233, 7247, 7253, 7254, 7255, 7262, 7263, 7266, 7275, 
    7276), class = "Date"), 
    Date_N = structure(c(6968, 6969, 7035, 7049, 7103, 7172, 7221, 7223, 7230, 7246, 7247, 
    7251, 7252, 7253, 7262, 7266, 7275, 7276, 7277, 7280), class = "Date"), 
    Date_AR = structure(c(6956, 6957, 6968, 6969, 6970, 7008, 
    7034, 7035, 7036, 7049, 7103, 7172, 7221, 7223, 7224, 7230, 
    7233, 7246, 7247, 7251), class = "Date"), Precip = c(23.6, 
    15.4, 3, 16.8, 0.2, 3.6, 22, 13.4, 0, 30.8, 4.6, 27.1, 0, 
    19, 2.8, 11.4, 2, 57.6, 9.4, 39), Location = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA)), row.names = c(NA, 20L), class = "data.frame")
6rqinv9w

6rqinv9w1#

使用dplyr::case_when可以执行以下操作:

library(dplyr)

dat |> 
  mutate(Location = case_when(
    Date_AR %in% Date_S & Date_AR %in% Date_N ~ "B",
    Date_AR %in% Date_S ~ "S",
    Date_AR %in% Date_N ~ "N"
  ))
#>        Date_S     Date_N    Date_AR Precip Location
#> 1  1989-01-17 1989-01-29 1989-01-17   23.6        S
#> 2  1989-01-18 1989-01-30 1989-01-18   15.4        S
#> 3  1989-01-31 1989-04-06 1989-01-29    3.0        N
#> 4  1989-03-10 1989-04-20 1989-01-30   16.8        N
#> 5  1989-04-05 1989-06-13 1989-01-31    0.2        S
#> 6  1989-04-06 1989-08-21 1989-03-10    3.6        S
#> 7  1989-04-07 1989-10-09 1989-04-05   22.0        S
#> 8  1989-08-21 1989-10-11 1989-04-06   13.4        B
#> 9  1989-10-11 1989-10-18 1989-04-07    0.0        S
#> 10 1989-10-12 1989-11-03 1989-04-20   30.8        N
#> 11 1989-10-21 1989-11-04 1989-06-13    4.6        N
#> 12 1989-11-04 1989-11-08 1989-08-21   27.1        B
#> 13 1989-11-10 1989-11-09 1989-10-09    0.0        N
#> 14 1989-11-11 1989-11-10 1989-10-11   19.0        B
#> 15 1989-11-12 1989-11-19 1989-10-12    2.8        S
#> 16 1989-11-19 1989-11-23 1989-10-18   11.4        N
#> 17 1989-11-20 1989-12-02 1989-10-21    2.0        S
#> 18 1989-11-23 1989-12-03 1989-11-03   57.6        N
#> 19 1989-12-02 1989-12-04 1989-11-04    9.4        B
#> 20 1989-12-03 1989-12-07 1989-11-08   39.0        N

相关问题