2016-07-19 60 views
0

我DF看起來是這樣的:分割在兩個R A柱

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

我想把它當作

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

我GOOGLE包stringr將是有益的,但我無法正確地使用它,因爲有兩個空間。

+0

您粘貼的DF看起來像只有一個空間。你試過了什麼代碼? – Nate

+0

有兩個空格;一個** **周**之後,另一個** **結束**之後。我現在沒有嘗試任何代碼 –

回答

2

您可以使用extracttidyr包在那裏你可以指定正則表達式進行拆分的列:

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" 
+0

非常感謝Psidom,但是如果數據框中有更多的列,我需要做什麼,並且我想創建一個只更改此列的數據框? –

+0

使用tidyr包中的第一個版本'extract',它應該保持其他列不變。 – Psidom

+0

它會拋出以下錯誤**錯誤:無法找到函數「提取」** –

0

這裏是一個鹼-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 
1

我們可以使用read.tablebase 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