首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串列拆分为年份、月份和日期

将字符串列拆分为年份、月份和日期
EN

Stack Overflow用户
提问于 2022-10-13 13:03:31
回答 1查看 46关注 0票数 2

我有一个数据集,其中info列看起来与下面的数据相似。我如何将它分成年、月和日专栏?

代码:

代码语言:javascript
复制
  df = structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8), info = c("PRISM_ppt_provisional_4kmD2_20220925_bil", 
    "PRISM_ppt_provisional_4kmD2_20220926_bil", "PRISM_ppt_provisional_4kmD2_20220927_bil", 
    "PRISM_ppt_provisional_4kmD2_20220928_bil", "PRISM_ppt_provisional_4kmD2_20220929_bil", 
    "PRISM_ppt_provisional_4kmD2_20220930_bil", "PRISM_ppt_provisional_4kmD2_20220925_bil", 
    "PRISM_ppt_provisional_4kmD2_20220926_bil")), class = "data.frame", row.names = c(NA, 
    -8L))
    
desired_df = structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8), info = c("PRISM_ppt_provisional_4kmD2_20220925_bil", 
"PRISM_ppt_provisional_4kmD2_20220926_bil", "PRISM_ppt_provisional_4kmD2_20220927_bil", 
"PRISM_ppt_provisional_4kmD2_20220928_bil", "PRISM_ppt_provisional_4kmD2_20220929_bil", 
"PRISM_ppt_provisional_4kmD2_20220930_bil", "PRISM_ppt_provisional_4kmD2_20220925_bil", 
"PRISM_ppt_provisional_4kmD2_20220926_bil"), year = c(2022, 2022, 
2022, 2022, 2022, 2022, 2022, 2022), month = c(9, 9, 9, 9, 9, 
9, 9, 9), day = c(25, 26, 27, 28, 29, 30, 25, 26)), class = "data.frame", row.names = c(NA, 
-8L))

    # Extract year, month and day from info column
    df = separate(df, info, into = c("year", "month", "day"), sep = ?, convert = T)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-13 13:07:04

在本例中最好使用extract

代码语言:javascript
复制
library(tidyr)
df %>% 
  extract(info, "PRISM_ppt_provisional_4kmD2_(\\d{4})(\\d{2})(\\d{2})_bil",
          into = c("year", "month", "day"), remove = F)

#   id                                     info year month day
# 1  1 PRISM_ppt_provisional_4kmD2_20220925_bil 2022    09  25
# 2  2 PRISM_ppt_provisional_4kmD2_20220926_bil 2022    09  26
# 3  3 PRISM_ppt_provisional_4kmD2_20220927_bil 2022    09  27
# 4  4 PRISM_ppt_provisional_4kmD2_20220928_bil 2022    09  28
# 5  5 PRISM_ppt_provisional_4kmD2_20220929_bil 2022    09  29
# 6  6 PRISM_ppt_provisional_4kmD2_20220930_bil 2022    09  30
# 7  7 PRISM_ppt_provisional_4kmD2_20220925_bil 2022    09  25
# 8  8 PRISM_ppt_provisional_4kmD2_20220926_bil 2022    09  26

如果您的最终目标是创建一个date列,那么这可能更好:

代码语言:javascript
复制
library(tidyr)
library(lubridate)
df %>% 
  extract(info, "PRISM_ppt_provisional_4kmD2_(.*)_bil",
          into = "date", remove = F) %>% 
  mutate(date = ymd(date),
         year = year(date),
         month = month(date),
         day = day(date))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74056262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档