[英]Split a column to multiple columns
我有表,第一列是:
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
如果要將相應的類設置為新列, remove = FALSE
可以添加, remove = FALSE
和convert = TRUE
。 separate
有一個默認的正則表達式來拆分非字符/數字值,因此您無需指定條件。 如果某些行缺少組件 add , 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.