【问题标题】:Mapping substr of dataframe to new column [duplicate]将数据框的 substr 映射到新列 [重复]
【发布时间】:2021-11-15 14:29:18
【问题描述】:

我想将 ï..Order.Date 列的第一个/第二个字符映射到名为 Order.Month 的新列。

ï..Order.Date 是数据框中的一列,其中包含 M/D/YY 或 MM/DD/YY 格式的字符串日期:

"12/1/17" "9/1/17" "9/19/17" "9/1/17" "9/29/17"

我需要创建一个使用包含前 1 或 2 个字符的子字符串的新列,并将其映射到月份:

months = c('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December')

对 r 还是新手,不确定解决此问题的最佳方法。

【问题讨论】:

    标签: r date


    【解决方案1】:

    我们可以将列转换为Date类,将month提取出来,转换为numeric作为索引,从内置向量month.name中获取对应的值

    df1$Order.Month <- month.name[as.integer(format(as.Date(df1[["ï..Order.Date"]], 
            format =  "%m/%d/%y"), "%m"))]
    

    或者使用lubridate - 使用mdy 转换为Date 类,提取month,用作month.name 中的索引

    library(lubridate)
    month.name[month(mdy(df1[["ï..Order.Date"]]))]
    

    【讨论】:

    • 完美运行 +10 以快速回复。你怎么知道 Order.Date 是我的 DataFrame 中的第一列?是因为前缀吗?
    • @Joeyboy 这只是一个猜测。我更新了实际的列名。只是名字中有一些不寻常的字符,我不确定是不是拼写错误
    【解决方案2】:

    创建日期对象后,您可以使用format(..., '%B') 获取月份名称。

    x <- c("12/1/17", "9/1/17", "9/19/17", "9/1/17", "9/29/17")
    format(lubridate::mdy(x), '%B')
    
    #[1] "December"  "September" "September" "September" "September"
    

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2022-01-06
      • 2018-02-13
      • 2020-10-04
      • 2018-02-08
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 2017-06-25
      相关资源
      最近更新 更多