Разделить столбец на две части

Мой DF выглядит так:

Time
Week End 07-01-10
Week End 07-02-10

Я хочу это как

Column        Time
Week End   07-01-10
Week End   07-02-10 

Я гуглил посылку stringr было бы полезно, но я не могу использовать его правильно, так как есть два пробела.

3 ответа

Решение

Ты можешь использовать extract от tidyr пакет, в котором вы можете указать регулярные выражения для разделения столбца:

library(tidyr)
extract(df, Time, into = c("Column", "Time"), "(.*)\\s(\\S+)")
#     Column     Time
# 1 Week End 07-01-10
# 2 Week End 07-02-10

использование (.*)\\s(\\S+) захватить две группы и разделить на пространство, за которым следует группа, которая не содержит места \\S+,

Если вы хотите использовать stringr пакет, вы можете использовать str_match функция с аналогичной функциональностью:

stringr::str_match(df$Time, "(.*)\\s(\\S+)")[, 2:3]
#      [,1]       [,2]      
# [1,] "Week End" "07-01-10"
# [2,] "Week End" "07-02-10"

strsplit также работает, если вы укажете пробел перед цифрой, здесь ?= стоит смотреть вперед и \\d является сокращением для цифр и эквивалентно [0-9]:

do.call(rbind, strsplit(df$Time, "\\s(?=\\d)", perl = T))
#      [,1]       [,2]      
# [1,] "Week End" "07-01-10"
# [2,] "Week End" "07-02-10"

Мы можем использовать read.table от base R, Пакеты не нужны

read.table(text=sub("\\s+(\\S+)$", ",\\1", df1$Time), header=FALSE, 
     col.names = c("Column", "Time"), stringsAsFactors=FALSE, sep=",")
#    Column     Time
#1 Week End 07-01-10
#2 Week End 07-02-10

Вот решение Base-R.

df <- data.frame(c("Week End 07-01-10", "Week End 07-02-10"),
                 stringsAsFactors=FALSE)
names(df) <- "Time"

# Assuming all columns end with (time?) in the same format.
df$Column <- substring(df$Time, 0, nchar(df$Time)-9)
df$Time <- substring(df$Time, nchar(df$Time)-8, nchar(df$Time))
df <- df[, c(2,1)]; df # Changing column order
Другие вопросы по тегам