[英]R tidyr: use separate function to separate character column with comma-separated text into multiple columns using RegEx
[英]Separate a column into multiple columns using tidyr::separate with sep=“”
df <- data.frame(category = c("X", "Y"), sequence = c("AAT.G", "CCG-T"), stringsAsFactors = FALSE)
df
category sequence
1 X AAT.G
2 Y CCG-T
我想將列sequence
分為5列(每個字符一個)。 我試圖用tidyr::separate
做到這一點,但是它在內部使用stringi::stri_split_regex
,它不接受空字符串作為分隔符(盡管sep
參數應該使用正則表達式)。
library(tidyr)
separate(df, sequence, into = paste0("V", 1:5), sep="")
Error: Values not split into 5 pieces at 1, 2
In addition: Warning messages:
1: In stringi::stri_split_regex(value, sep, n_max) :
empty search patterns are not supported
2: In stringi::stri_split_regex(value, sep, n_max) :
empty search patterns are not supported
預期輸出如下所示:
category V1 V2 V3 V4 V5
1 X A A T . G
2 Y C C G - T
你可以用tidyr
extract
做到這tidyr
library(tidyr)
extract(df, sequence, into=paste0('V', 1:5), '(.)(.)(.)(.)(.)')
# category V1 V2 V3 V4 V5
#1 X A A T . G
#2 Y C C G - T
或者創建一個分隔符gsub
和使用,作為sep
的separator
library(dplyr)
library(tidyr)
df %>%
mutate(sequence=gsub('(?<=.)(?=.)', ',', sequence, perl=TRUE)) %>%
separate(sequence, into=paste0('V', 1:5), sep=",")
# category V1 V2 V3 V4 V5
#1 X A A T . G
#2 Y C C G - T
或者您可以使用cSplit
library(splitstackshape)
setnames(cSplit(df, 'sequence', '', stripWhite=FALSE),
2:6, paste0('V', 1:5))[]
# category V1 V2 V3 V4 V5
#1: X A A T . G
#2: Y C C G - T
sep
可以是整數向量。 使用sep=1:4
就足夠了,但是5也可以,而且看起來更好。
df %>% separate(sequence, into = paste0("V", 1:5), sep = 1:5)
給予:
category V1 V2 V3 V4 V5
1 X A A T . G
2 Y C C G - T
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.