我有以下示例数据:
library(tidyverse)
df <- structure(list(date = c("3/31/19\n10:00 PM", "3/31/19\n11:30 PM", "4/1/19\n12:00 AM", "4/1/19\n11:00 PM", "4/1/19\n11:08 PM", "4/1/19\n11:08 PM", "4/2/19\n12:00 AM", "4/2/19\n12:30 AM")), .Names = ".", row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame"))
它在同一<chr>
字符串中给了我一个日期和时间。我一直在麻木,无法将日期与时间分开。我已经尝试过str_split()
,基础strsplit()
,separate()
和grep
系列的每个组合。我如何从名为.
的一列中找到
3/31/19\n10:00 PM
到两个分别名为date
和time
的列中? -
date time
3/31/19 10:00 PM
拆分\n
未产生任何结果。这是因为值是<chr>
,而不是简单的字符串吗?
答案 0 :(得分:1)
将'df'中的单列命名为.
,将rename
命名为nam,然后将其sepaarate
分为两列,其中sep
指定为\n
library(tidyverse)
df %>%
rename(X1 = ".") %>%
# if there are multiple columns, use rename_all
#rename_all(~ paste0("X", seq_along(.))) %>%
separate(X1, into = c("date", "time"), sep="\n")
# A tibble: 8 x 2
# date time
# <chr> <chr>
#1 3/31/19 10:00 PM
#2 3/31/19 11:30 PM
#3 4/1/19 12:00 AM
#4 4/1/19 11:00 PM
#5 4/1/19 11:08 PM
#6 4/1/19 11:08 PM
#7 4/2/19 12:00 AM
#8 4/2/19 12:30 AM
对于base R
,我们可以在将read.csv
替换为\n
并与,
串联之后使用\n
out <- read.csv(text = paste(sub("\n", ",", df[[1]]), collapse="\n"),
header = FALSE, col.names = c("date", "time"))
答案 1 :(得分:1)
我尝试过了...
library(tidyverse)
df <- df %>% separate ('.', c('Date', 'Time'), sep = '\n')
,效果很好。您可以分享您尝试的无效代码吗?