我很抱歉(我是全新的),因为我知道这已经发布了一百万次,但我想了解的不仅是答案,而且我应该使用哪种方法作为最佳实践。我已经点击了10+链接来说明如何做到这一点,但是我似乎在数据上搞砸了。
我的heartrate_seconds.csv中有3列数据(ID、日期、值),我的日期列包括我想分开的时间和日期(Ex: 4/12/2016 7:22:50 AM)
到目前为止,我使用过的最接近的
heartrate_timeanddate <- heartrate_seconds %>%
mutate(Time = as.character(Time)) %>%
separate(Time, into = c("Date", "Time"), sep = " ") %>%
mutate(Time = as.Date(Date))但是,这会导致我新添加的Time列作为日期,如何更改它?
我尝试过的其他方法很早就失败了:
heartrate_seconds_Time <- separate(heartrate_seconds = df, col = Time, into = c('Date, Time'), sep = ' ')heartrate_time <- data.frame(heartrate_seconds, Time = c('Date','Time'))
heartrate_time$date <- as.Date(heartrate_time$all)
heartrate_time$date <- format(as.Date(heartrate_time$all), format ="%H:%M:%S")heartrate_seconds %>%
separate(Time, into = c('Date, Time'), sep = '\\\\') %>%
select(Date, Time)我觉得我不正确地使用了其他人的方法,这让我陷入了更深层次的困惑。所以我来寻求澄清。非常感谢!
所有这些仅仅是因为我无法将.csv导入到SQL中,我可能已经在模式中修复了这个问题,但我想一次只能修复一件事。
发布于 2022-02-01 08:39:02
在您的例子中,我将使用separate或lubridate包。
tidyr::separate
使用tidyr::separate和参数extra = "merge"。这意味着,如果在into中包含较少的列,则其余信息将保留在最后一列中。在这里,这意味着您可以使用它获得带有分隔符" "的两列。
library(dplyr)
library(tidyr)
df %>%
separate(date, into = c("Date","Time"), extra = "merge", sep = " ")
Date Time
1 4/12/2016 7:22:50 AM
2 6/12/2016 7:22:50 PMlubridate
使用lubridate包,您可以使用dmy_hms轻松地将列转换为datetime对象。然后使用date和format创建新变量。
library(lubridate)
library(dplyr)
df %>%
mutate(date = dmy_hms(date),
Date = date(date),
Time = format(date, format = "%H:%M:%S"))
date Date Time
1 2016-12-04 07:22:50 2016-12-04 07:22:50
2 2016-12-06 19:22:50 2016-12-06 19:22:50发布于 2022-02-01 06:05:36
一个简单的选择是像以前一样使用separate,但是用另一个字符替换第一个空格,然后分开。
library(tidyverse)
df %>%
mutate(col = str_replace(date, "\\s", "|")) %>%
separate(col, into = c("Date", "Time"), sep = "\\|") %>%
mutate(Date = as.Date(Date, format="%d/%m/%Y"))输出
date Date Time
1 4/12/2016 7:22:50 AM 2016-12-04 7:22:50 AM
2 6/12/2016 7:22:50 PM 2016-12-06 7:22:50 PM数据
df <-
structure(list(date = c(
"4/12/2016 7:22:50 AM", "6/12/2016 7:22:50 PM"
)),
class = "data.frame",
row.names = c(NA,-2L))另一个选项是使用as.Date将date转换为类日期的变量。然后,对于时间变量,我们可以使用格式将时间分量提取为字符串。
df$Date <- as.Date(df$date)
df$Time <- format(as.POSIXct(df$date), format = "%H:%M:%S")输出
date Date Time
1 2021-05-28 07:16:52 2021-05-28 07:16:52
2 2021-05-30 13:35:00 2021-05-30 13:35:00
3 2021-05-30 14:22:55 2021-05-30 14:22:55
4 2021-05-28 06:51:51 2021-05-28 06:51:51
5 2021-05-30 13:31:55 2021-05-30 13:31:55
6 2021-05-30 13:33:38 2021-05-30 13:33:38
7 2021-05-30 13:35:51 2021-05-30 13:35:51
8 2021-05-30 13:38:44 2021-05-30 13:38:44
9 2021-05-30 13:51:19 2021-05-30 13:51:19
10 2021-05-30 14:04:53 2021-05-30 14:04:53数据
df <- structure(list(date = structure(c(1622186212, 1622381700, 1622384575,
1622184711, 1622381515, 1622381618, 1622381751, 1622381924, 1622382679,
1622383493),
tzone = "UTC", class = c("POSIXct", "POSIXt"))),
row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))https://stackoverflow.com/questions/70935870
复制相似问题