Разделение содержимого tibble(), которое было создано с помощью веб-очистки

#r #dplyr

#r #dplyr

Вопрос:

У меня есть этот образец данных:

 library(tidyverse)

df <- structure(list(date = c("3/31/19n10:00 PM", "3/31/19n11:30 PM", "4/1/19n12:00 AM", "4/1/19n11:00 PM", "4/1/19n11:08 PM", "4/1/19n11:08 PM", "4/2/19n12:00 AM", "4/2/19n12:30 AM")), .Names = ".", row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame"))
  

Это дает мне дату и время в той же <chr> строке. Я был ошеломляюще неспособен разделить дату со временем. Я перепробовал все комбинации str_split() , базовых strsplit() , separate() и grep семейств. Как я могу перейти от одного столбца с именем . :

 3/31/19n10:00 PM
  

на два отдельных столбца с именем date amp; time ? —

 date       time
3/31/19    10:00 PM
  

Разделение на n не дало никаких результатов. Это потому, что значения являются <chr> , а не простыми строками?

Ответ №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. Не опечатка — когда я очистил данные и преобразовал в tibble() , это то, что это дало мне, как ни странно

2. @papelr хорошо, вы можете указать имя в tibble(Col = .)

Ответ №2:

Я попробовал это…

 library(tidyverse)

df <- df %>% separate ('.', c('Date', 'Time'), sep = 'n')
  

и это сработало отлично. Можете ли вы поделиться кодом, который вы пробовали, но который не сработал?