我有表中的列的第一列是:拆分到多個字段
chr10:100002872-100002872
chr10:100003981-100003981
chr10:100004774-100004774
chr10:100005285-100005285
chr10:100007123-100007123
我想將它轉換成3個獨立的列,但我無法定義「:」和「 - 」來使用strsplit命令。 我該怎麼辦?
我有表中的列的第一列是:拆分到多個字段
chr10:100002872-100002872
chr10:100003981-100003981
chr10:100004774-100004774
chr10:100005285-100005285
chr10:100007123-100007123
我想將它轉換成3個獨立的列,但我無法定義「:」和「 - 」來使用strsplit命令。 我該怎麼辦?
這裏有一種方法:
library(data.table)
DF[, paste0("V1.",1:3) ] <- tstrsplit(DF$V1, ":|-")
# V1 V1.1 V1.2 V1.3
# 1 chr10:100002872-100002872 chr10 100002872 100002872
# 2 chr10:100003981-100003981 chr10 100003981 100003981
# 3 chr10:100004774-100004774 chr10 100004774 100004774
# 4 chr10:100005285-100005285 chr10 100005285 100005285
# 5 chr10:100007123-100007123 chr10 100007123 100007123
strsplit
接受涉及 「或」 運算符,|
正則表達式,爲@AnandaMahto說。 tstrsplit
只是data.table包中添加的一個便利功能。
如果您轉換您的data.frame到data.table(其中有許多優點,除了輕微的學習曲線,沒有壞處),你會做:
setDT(DF)[, paste0("V1.",1:3) := tstrsplit(V1, ":|-")]
# V1 V1.1 V1.2 V1.3
# 1: chr10:100002872-100002872 chr10 100002872 100002872
# 2: chr10:100003981-100003981 chr10 100003981 100003981
# 3: chr10:100004774-100004774 chr10 100004774 100004774
# 4: chr10:100005285-100005285 chr10 100005285 100005285
# 5: chr10:100007123-100007123 chr10 100007123 100007123
替代品。有(繁瑣)的方式來獲得基礎R同樣的事情,就像
DF[, paste0("V1.",1:3) ] <- do.call(rbind, strsplit(DF$V1, ":|-"))
而@ AnandaMahto的包也有這個方便的功能:
library(splitstackshape)
cSplit(DF, "V1", ":|-")
# V1.1 V1.2 V1.3 V1_1
# 1: chr10 100002872 100002872 chr10:100002872-100002872
# 2: chr10 100003981 100003981 chr10:100003981-100003981
# 3: chr10 100004774 100004774 chr10:100004774-100004774
# 4: chr10 100005285 100005285 chr10:100005285-100005285
# 5: chr10 100007123 100007123 chr10:100007123-100007123
此外,類似與tidyr
。如果您想保留原始列,您可以在 中添加, remove = FALSE
和convert = TRUE
,如果您要將相應的類設置爲新列。 separate
有一個默認的正則表達式來分割非字符/數字值,因此你不需要指定你的條件。如果某些行缺少組件,請添加, extra = "merge"
library(tidyr)
separate(DF, "V1", paste0("V1.",1:3))
# V1.1 V1.2 V1.3
# 1 chr10 100002872 100002872
# 2 chr10 100003981 100003981
# 3 chr10 100004774 100004774
# 4 chr10 100005285 100005285
# 5 chr10 100007123 100007123
使用'|'分隔分割字符? – A5C1D2H2I1M1N2O1R2T1
你是什麼意思?請詳細解釋 – YBC