分割通过网络抓取构建的tibble()的内容

时间:2019-03-31 21:20:30

标签: r dplyr

我有以下示例数据:

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

到两个分别名为datetime的列中? -

date       time
3/31/19    10:00 PM

拆分\n未产生任何结果。这是因为值是<chr>,而不是简单的字符串吗?

2 个答案:

答案 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')

,效果很好。您可以分享您尝试的无效代码吗?