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
相关产品推荐
相关产品推荐

