【问题标题】:Why does 'rbind.data.frame' convert Date to numeric?为什么“rbind.data.frame”将日期转换为数字?
【发布时间】:2019-03-01 18:59:23
【问题描述】:

我试图了解为什么rbind.data.frame 将我的日期转换为数字格式以及如何解决它。假设我有以下内容:

v <- list(
          row1=list(col1 = as.Date("2011-01-23"), col2="A"), 
          row2=list(col1 = as.Date("2012-03-03"), col2="B"))

现在我尝试做:

df <- do.call(rbind.data.frame, v)
str(df)
'data.frame':   2 obs. of  2 variables:
 $ col1: num  14997 15402
 $ col2: Factor w/ 2 levels "A","B": 1 2

为什么col1 变成了数字?如何修复它,使其正确成为df 中的Date 字段。

注意:我更喜欢原生 R 解决方案,但其他包会很有趣

【问题讨论】:

  • 简单。 rbind.data.frame 不会这样做,如果它实际上被赋予了数据帧。而不是使用list in the "inner" level of construction, use data.frame`。

标签: r dataframe


【解决方案1】:

在 42- 的评论 Rather than using list in the "inner" level of construction, use data.frame 的基础上,对于此示例,您可以将内部列表转换为 data.frame,然后 rbind 按预期工作。

> d = do.call(rbind, lapply(v, as.data.frame))
> str(d)
'data.frame':   2 obs. of  2 variables:
 $ col1: Date, format: "2011-01-23" "2012-03-03"
 $ col2: Factor w/ 2 levels "A","B": 1 2

【讨论】:

    【解决方案2】:

    使用dplyr

    > library(dplyr)
    > df <- bind_rows(v)
    > df
    # A tibble: 2 x 2
      col1       col2 
      <date>     <chr>
    1 2011-01-23 A    
    2 2012-03-03 B
    

    【讨论】:

    • 小注:bind_rows() 将在没有do.call() 的情况下处理数据帧列表本身。
    • 有原生的 R 解决方案吗?我正在使用不支持 dplyr 的旧版 R
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多