[英]Using tidyr and regex to create two columns
我想將包含代碼和地名的一列數據分成兩個單獨的列。 我嘗試使用tidyr
的單獨命令,但在使用正則表達式時遇到了一些困難(我之前沒有使用過它們,無法弄清楚我做錯了什么/正則表達式是如何工作的)。
數據在格式方面非常一致。 大多數觀察以代碼開頭,然后是位置。 偶爾有一個觀察結果只是一個位置(沒有代碼)。 以下是數據示例:
df <- read.table(text = c("
obs name
1 01-220 location 1
2 05-23 town 3
3 District 2"), header = T)
我使用以下代碼:
df <- df %>% separate(name, into = c("location_code", "location_name"), sep = "([0-9] [A-z])")
結果(注意 location_code 中的最后一個數字和 location_name 中的第一個字母丟失):
obs location_code location_name
1 01-22 ocation 1
2 05-2 own 3
3 District 2 NA
我想要的輸出是:
# obs location_code location_name
# 1 01-220 location 1
# 2 05-23 town 3
# 3 NA District 2
提前致謝!
我們可以使用正則表達式環視來指定sep
。
separate(df, name, into = c("location_code", "location_time"),
"(?<=([0-9] )|\\b)(?=[A-Za-z])")
# obs location_code location_time
#1 1 01-220 location 1
#2 2 05-23 town 3
#3 3 District 2
或extract
extract(df, name, into = c("location_code", "location_time"), "([0-9-]*)\\s*(.*)")
# obs location_code location_time
#1 1 01-220 location 1
#2 2 05-23 town 3
#3 3 District 2
df <- structure(list(obs = 1:3, name = c("01-220 location 1", "05-23 town 3",
"District 2")), .Names = c("obs", "name"), class = "data.frame", row.names = c(NA,
-3L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.