You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:根据日期列判断风暴发生区域(北/南/两者)

解决方法:根据日期匹配填充Location列

针对你的需求,我们可以通过判断Date_AR列的日期是否存在于Date_S(南部)或Date_N(北部)列,生成对应的Location标记,以下是两种可行的实现方式:

方法1:基础R实现

通过逻辑向量判断与嵌套ifelse完成填充:

# 加载数据框
df <- 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")

# 生成逻辑判断向量:判断Date_AR是否在对应区域日期列中
is_south <- df$Date_AR %in% df$Date_S
is_north <- df$Date_AR %in% df$Date_N

# 根据逻辑组合填充Location列
df$Location <- ifelse(is_south & is_north, "B",
                      ifelse(is_south, "S",
                             ifelse(is_north, "N", NA)))

方法2:dplyr管道式实现

如果习惯使用tidyverse风格,用dplyr的case_when可以更直观地处理多条件判断:

library(dplyr)

df <- df %>%
  mutate(
    # 临时生成逻辑标记
    is_south = Date_AR %in% Date_S,
    is_north = Date_AR %in% Date_N,
    # 按条件填充Location
    Location = case_when(
      is_south & is_north ~ "B",
      is_south ~ "S",
      is_north ~ "N",
      TRUE ~ NA_character_
    )
  ) %>%
  select(-is_south, -is_north) # 可选:移除临时生成的逻辑列

结果验证

运行代码后,Location列会被正确填充:

  • 例如Date_AR为1989-01-17(对应数值6956)仅存在于Date_S,Location为"S"
  • 日期1990-01-15(数值7035)同时存在于Date_S和Date_N,Location为"B"

内容的提问来源于stack exchange,提问作者arcticmermaid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:50:29