我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
將是有益的,但我無法正確地使用它,因爲有兩個空間。
我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
將是有益的,但我無法正確地使用它,因爲有兩個空間。
您可以使用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"
非常感謝Psidom,但是如果數據框中有更多的列,我需要做什麼,並且我想創建一個只更改此列的數據框? –
使用tidyr包中的第一個版本'extract',它應該保持其他列不變。 – Psidom
它會拋出以下錯誤**錯誤:無法找到函數「提取」** –
這裏是一個鹼-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
我們可以使用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
您粘貼的DF看起來像只有一個空間。你試過了什麼代碼? – Nate
有兩個空格;一個** **周**之後,另一個** **結束**之後。我現在沒有嘗試任何代碼 –