#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')
и это сработало отлично. Можете ли вы поделиться кодом, который вы пробовали, но который не сработал?