Разделение содержимого элемента tibble (), созданного с помощью очистки веб-страниц - PullRequest
1 голос
/ 01 апреля 2019

У меня есть этот пример данных:

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>, а не простые строки?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

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

library(tidyverse)

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

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

1 голос
/ 01 апреля 2019

Одиночный столбец в 'df' называется ., rename имя столбца и затем 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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...