将 data.frame 中的列转换为日期

Posted

技术标签:

【中文标题】将 data.frame 中的列转换为日期【英文标题】:Convert column in data.frame to date 【发布时间】:2016-01-29 06:20:51 【问题描述】:

我的数据框

a1 <- c("a","a","b","b","c","d","e","e")
b2 <- c("01.01.2015", "02.02.2015", "14.02.2012", "16.08.2008", "17.06.2003", "31.01.2015", "07.01.2022", "09.05.2001")
c3 <- c("1a", "2b", "3c", "4d", "5e", "6f", "7g", "8h")
d3 <- c(1:8)

df2 <- data.frame(a1,b2,c3,d3, stringsAsFactors = F)

我的代码。

library(dplyr)
library(magrittr)

test <- df2 %>%
    group_by(a1) %>% 
    as.Date(b2, format = "%d.%m.%Y")

as.Date.default(., b2, format = "%d.%m.%Y") 中的错误: 不知道如何转换'.'上课“日期”

嗯,我试过不带管道:

df$b2 <- as.Date(df$b2, format = "%d.%m.%Y")

df$b2 中的错误:“闭包”类型的对象不是子集

首先:为什么我会收到两条不同的错误消息,因为我(就我的理解)正在做同样的事情?

第二,为什么我不能将我的列转换为日期?!

我可能应该补充一点,我知道使用mutate 将列更改为date 格式。但我想知道为什么我的方法不起作用。

【问题讨论】:

对您的“第一”的备注:您似乎没有名为 df 的数据框架,但有一个名为 df2 的数据框架 df 是一个函数。你的意思可能是df2。所以,你的问题的答案是:错字。 @Pascal 是的,要问一个问题。 关于问题 2。df2$b2 &lt;- as.Date(df2$b2, format = "%d.%m.%Y") 有效。 我不知道,我从不使用这种奇怪的语法%&gt;% 【参考方案1】:

mutate内进行转换

df2 %>%
   group_by(a1) %>%
   mutate(b2=as.Date(b2, format = "%d.%m.%Y"))
#    a1         b2    c3    d3
#  (chr)     (date) (chr) (int)
#1     a 2015-01-01    1a     1
#2     a 2015-02-02    2b     2
#3     b 2012-02-14    3c     3
#4     b 2008-08-16    4d     4
#5     c 2003-06-17    5e     5
#6     d 2015-01-31    6f     6
#7     e 2022-01-07    7g     7
#8     e 2001-05-09    8h     8

如果我们只需要进行转换,我们不需要按 'a1' 分组。

mutate(df2, b2= as.Date(b2, format= "%d.%m.%Y"))

通过使用magrittr 中的%&lt;&gt;% 运算符,我们可以就地转换。

df2 %<>%
  mutate(b2= as.Date(b2, format= "%d.%m.%Y"))

  

【讨论】:

行得通,是的。但是,我不明白为什么我的方法不起作用?! @Chrissl 在dplyr 框架中,我们使用mutate/transmute 更改/创建新列或使用summarise 获取每个组的摘要输出。 好的。在这里使用 dplyr 包有什么特别的优势。它需要更多的打字,而且也一样?! @Chrissl 对于这种情况,您不需要 group_by 步骤,我只是想使用您的代码来显示您出错的地方。 @Chrissl 关于优点部分,有人说使用%&gt;%时更容易阅读。这背后可能有一些道理,因为当我向一个 Python 人(没有 R 经验)展示 dplyr 代码和其他一些给出相同结果的代码时,他可以用 dplyr 更好地理解它。对我来说,这是主观的。

以上是关于将 data.frame 中的列转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

如何将 data.frame 表转换为 xts 对象

将 R data.frame 强制转换为 nz.data.frame 时出错

将具有日期格式的列中的所有行转换为文本格式

按列名对数据框的列进行排序为日期

将数字转换为data.frame中的字母

将包含多种字符串日期格式的列转换为 Spark 中的 DateTime