r - 将存储在列表中的数据类型转换为日期 R
问题描述
我有一个清单data
。
每个都有几个数据框。
[[1]]
ID: int [1:100] ...
Date: Factor w/ ...
days: num [1:100] ...
[[2]]
ID: int [1:100] ...
Date: Factor w/ ...
像这样。
我想将该因素转换为日期格式。
我考虑过
取消列表 - 更改格式 - 使其再次列出。
但我不知道该怎么做..
sapply(data, function(x) x$Date <- as.Date(x$Date))
这行不通。它只返回 Date 而不会更改数据类型。有什么快速的方法来转换这种格式吗?
我可以通过使用 for 循环来解决这个问题。
for(i in 1:2){
data[[i]]$Date <- as.Date(data[[i]]$Date)}
但我想使用 sapply 或 lappy。
解决方案
最好先转换factor
成character
再Date
格式化。最简单的方法是使用lubridate
包。ymd
将character
格式向量转换2018-11-22
为年-月-日日期时间对象。请注意 lambda-function body,数据框改变后是 typex
的,是return(x)
. 请看下面的代码:
library(lubridate)
# simulation of data
df1 <- data.frame(
ID = 1:100,
Date = as.factor(sample(seq(ymd("2018-01-01"), ymd("2018-12-01"), 1), 100)),
days = sample(100))
df2 <- data.frame(
ID = 1:100,
Date = as.factor(sample(seq(ymd("2018-01-01"), ymd("2018-12-01"), 1), 100, replace =TRUE)))
dfs <- list(df1, df2)
str(dfs)
# List of 2
# $ :'data.frame': 100 obs. of 3 variables:
# ..$ ID : int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ Date: Factor w/ 100 levels "2018-01-06","2018-01-10",..: 17 89 40 2 84 46 58 62 66 43 ...
# ..$ days: int [1:100] 50 4 19 6 33 47 95 25 13 5 ...
# $ :'data.frame': 100 obs. of 2 variables:
# ..$ ID : int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ Date: Factor w/ 87 levels "2018-01-03","2018-01-04",..: 3 30 61 6 78 34 5 71 49 55 ...
# handling the data
dfs_2 <- lapply(dfs, function(x) {
x$Date <- ymd(as.character(x$Date))
x
})
str(dfs_2)
# List of 2
# $ :'data.frame': 100 obs. of 3 variables:
# ..$ ID : int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ Date: Date[1:100], format: "2018-03-10" "2018-10-25" "2018-11-25" ...
# ..$ days: int [1:100] 7 99 75 91 30 78 9 82 15 37 ...
# $ :'data.frame': 100 obs. of 2 variables:
# ..$ ID : int [1:100] 1 2 3 4 5 6 7 8 9 10 ...
# ..$ Date: Date[1:100], format: "2018-05-30" "2018-05-20" "2018-05-13" ...
推荐阅读
- python - 带有 seaborn joinplot 的 2D 核密度图
- assembly - 装配过程中的奇怪行为
- python - 如何解决 pygame 中不支持编解码器错误的“set_pos()”?
- php - php - 在向支付网关提交数据之前在数据库中插入采购订单
- c++ - MODBUS 示例 QT 框架文件 .pro
- java - 索引页上的阔叶商务 404
- aws-lambda - 来自 lambda 的 AWS iot 核心访问
- python - Keras:两个嵌入层的串联失败
- python - 使用 Jinja2 模板 {{table|safe}} 从烧瓶中渲染 Python df.to_html() 表时使 id 和 id 保持不变
**Flask code:** def prgrm(): sqldf = sql_df('engine_table', db.engine) # df of main data date = sqldf.iloc[-1]['Date'] # date of one day less d
- rust - rust 中的异步测试 - 如何通过侧线程或恐慌使测试失败