簡體   English   中英

將一列拆分為多列

[英]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 = FALSEconvert = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM