【问题标题】:Convert strings to dates only for numeric values in R仅将字符串转换为 R 中数值的日期
【发布时间】:2019-06-22 03:22:22
【问题描述】:

假设我有一个混合了数字和字符串的值向量,如下所示:

df<-structure(c("Location", "SKU", "Manufacturer", "Size", 
            "State", "43488", "43489", "43490", 
            "43491"), .Names = c("col1","col2","col3","col4","col5","col6","col7","col8","col9"))

我只想将数值(最初是 excel 日期)转换为 R 日期格式,并将其余变量保持原样。我正在使用的向量只是较大 data.frame 中的一行,因此我宁愿避免从字符串中拆分日期并随后合并。 到目前为止,我尝试了以下方法:

as.Date(as.numeric(df), origin = "1899-12-30")
[1] NA           NA           NA           NA           NA           "2019-01-23" "2019-01-24" "2019-01-25" "2019-01-26"

但这会将字符串转换为 NA。

【问题讨论】:

  • 这些数据确实应该在上游更好地排序,这样您就不会陷入这种情况。
  • @alistaire 如果只是! :(

标签: r date


【解决方案1】:

我们可以找出其中包含数字的索引,然后仅将这些值转换为日期。

inds <- grepl("\\d+", df)
df[inds] <- format(as.Date(as.numeric(df[inds]), origin = "1899-12-30"))

df
#      col1           col2           col3           col4           col5 
#"Location"          "SKU" "Manufacturer"         "Size"        "State"

#      col6           col7           col8           col9 
#"2019-01-23"   "2019-01-24"   "2019-01-25"   "2019-01-26" 

使用ifelse 对上述答案的一种变体,无需创建额外的变量 (inds)

ifelse(grepl("\\d+", df), format(as.Date(as.numeric(df), origin = "1899-12-30")), df)

【讨论】:

    【解决方案2】:

    试试这个:
    - 创建一个函数来检查一个值是否可以强制为numeric类型
    - 如果true,则将其转换为numeric并格式化为date
    - 如果是false,则按原样返回值

    df<-structure(c("Location", "SKU", "Manufacturer", "Size", 
                    "State", "43488", "43489", "43490", 
                    "43491"), .Names = c("col1","col2","col3","col4","col5","col6","col7","col8","col9"))
    
    convert_num_to_date = function(x){
      if (is.na(as.numeric(x))) {
        return(x)
      } else {
        x = format(as.Date(as.numeric(x), origin = "1899-12-30"))
        return(x)
      }
    }
    
    df = sapply(df, convert_num_to_date)
    

    【讨论】:

      猜你喜欢
      • 2019-10-03
      • 2023-03-26
      • 1970-01-01
      • 2021-03-14
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多