如何用read_csv解析Year-B1/Year-B2格式的半年期时间变量
处理CSV中的半年期时间变量
由于col_date()的格式参数仅支持标准日期格式占位符(比如%Y代表年份、%m代表月份),无法直接解析Year-B1/Year-B2这种自定义格式,因此需要分两步处理:先读取为字符型,再转换为目标格式。
步骤1:读取CSV文件
先将time列读取为字符型,避免解析错误:
library(tidyverse) tb_r <- read_csv("tb.csv", col_types = cols( time = col_character(), country = col_character(), value = col_double() ))
步骤2:转换时间格式
提供两种方案,按需选择:
方案一:转为日期对象(支持后续时间运算)
如果需要后续对时间进行排序、筛选等操作,建议先转为标准日期,再格式化展示:
tb_r_processed <- tb_r %>% mutate( # 将B1映射为6月30日,B2映射为12月31日,转为日期类型 date = as.Date(str_replace(time, "B1", "-06-30") %>% str_replace("B2", "-12-31")), # 格式化为"Year:Jun"/"Year:Dec"样式 time = format(date, "%Y:%b") ) %>% select(time, country, value) # 保留需要的列
方案二:直接字符串替换(仅用于展示)
如果不需要日期类型,仅需修改显示格式,直接替换字符串即可:
tb_r_processed <- tb_r %>% mutate( time = str_replace(time, "B1", ":Jun") %>% str_replace("B2", ":Dec") )
最终结果
处理后的数据框如下:
# A tibble: 4 × 3 time country value <chr> <chr> <dbl> 1 2021:Jun USA 3 2 2021:Dec USA 5 3 2022:Jun USA 4 4 2022:Dec USA 7
内容的提问来源于stack exchange,提问作者Marie Veit
相关产品推荐
相关产品推荐

