【问题标题】:How do I initialize an empty data frame *with a Date column* in R?如何在 R 中使用日期列 * 初始化一个空数据框?
【发布时间】:2021-10-30 11:01:28
【问题描述】:

如何在 R 中用日期列初始化一个空数据框

我尝试了很多方法,但是当我尝试在正确的列中附加带有日期的行时,它们都会生成错误消息。例如:

> test <- data.frame(date=as.Date(character()), var1 = as.numeric(), var2 = as.numeric())
> str(test)
'data.frame':   0 obs. of  3 variables:
 $ date: 'Date' num(0) 
 $ var1: num 
 $ var2: num 
> test <- rbind(test, c(as.Date("2020-01-01"), 123, 456))
Error in as.Date.numeric(e) : 'origin' must be supplied

将第一列初始化为整数,然后将“Date”类添加到它会产生相同的错误:

> test <- data.frame(date=integer(0), var1=as.numeric(), var2=as.numeric())
> str(test)
'data.frame':   0 obs. of  3 variables:
 $ date: int 
 $ var1: num 
 $ var2: num 
> class(test$date) <- "Date"
> str(test)
'data.frame':   0 obs. of  3 variables:
 $ date: 'Date' int(0) 
 $ var1: num 
 $ var2: num 
> test <- rbind(test, c(as.Date("2020-01-01"), 123, 456))
Error in as.Date.numeric(e) : 'origin' must be supplied

我也搜索过此错误消息,但我发现的示例都涉及将数字转换为日期。我无法在我的上下文中找到任何示例。

初始化日期列的正确方法是什么,以便我可以像上面那样向它添加格式化的日期?

谢谢!

【问题讨论】:

  • 顺便说一句,有时值得分解代码以调试它为什么不起作用。 c(as.Date("2020-01-01"), 123, 456) 单独不起作用,甚至在您到达 rbind 步骤之前。这是因为 R 试图将 123456 转换为 Date 类,但它不知道“第 0 天”的原点。
  • 好点。谢谢。

标签: r dataframe date


【解决方案1】:

这个问题更可能是由于vector 不能有多个class 串联造成的。我们可以通过data.frame

rbind(test, setNames(data.frame(as.Date("2020-01-01"), 123, 456), 
        names(test)))

-输出

        date var1 var2
1 2020-01-01  123  456

【讨论】:

  • 我不太明白。这篇文章的主题是初始化一个空数据框。您的解决方案 nrow (rbind (test, setNames (data.frame (as.Date ("2020-01-01")), 123, 456)), names (test)))) 返回 1,不为零,并且仍标记为有效。我的解决方案 nrow (tibble (date = as.Date (x = integer (0), origin = "2000-01-01"))) 返回 0。那么什么是空数据框
  • @MarekFiołka 问题是rbindc(as.Date("2020-01-01"), 123, 456) 正在制造问题
  • 嗯,我一定是看帖子标题太仔细了。
  • @MarekFiołka 好吧,你自己的问题here 我从字面上看
  • 亲爱的@Akrun。请注意,这是我在 Stack Overflow 上的第一个问题。我是一个完全绿色的新手。我不知道名字旁边的青铜、银色和金色圆点是什么。这些数字意味着什么以及为什么有些是数十万而有些只是少数。我不知道如何向某人寻求答案。我不明白为什么一对一的答案和-1紧挨着另一个。希望这能证明我的合理性。
【解决方案2】:
library(tidyverse)
df = tibble(
  date = as.Date(x = integer(0), origin = "2000-01-01")
)

【讨论】:

  • 这并没有真正解决关于如何添加到一个空的data.frame的问题。
  • 谢谢。我坚持使用 akrun 的解决方案,因为它在 base 中可用,但我很欣赏这个建议。
  • 标题是:“如何在 R 中用日期列初始化一个空数据框”。我的解决方案正是这样做的,也就是说,它使用日期类型列初始化一个空数据框。
猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多