将 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 <- as.Date(df2$b2, format = "%d.%m.%Y")
有效。
我不知道,我从不使用这种奇怪的语法%>%
。
【参考方案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
中的%<>%
运算符,我们可以就地转换。
df2 %<>%
mutate(b2= as.Date(b2, format= "%d.%m.%Y"))
【讨论】:
行得通,是的。但是,我不明白为什么我的方法不起作用?! @Chrissl 在dplyr
框架中,我们使用mutate/transmute
更改/创建新列或使用summarise
获取每个组的摘要输出。
好的。在这里使用 dplyr 包有什么特别的优势。它需要更多的打字,而且也一样?!
@Chrissl 对于这种情况,您不需要 group_by
步骤,我只是想使用您的代码来显示您出错的地方。
@Chrissl 关于优点部分,有人说使用%>%
时更容易阅读。这背后可能有一些道理,因为当我向一个 Python 人(没有 R 经验)展示 dplyr 代码和其他一些给出相同结果的代码时,他可以用 dplyr 更好地理解它。对我来说,这是主观的。以上是关于将 data.frame 中的列转换为日期的主要内容,如果未能解决你的问题,请参考以下文章