これとこれのnth
ように、文字列をすべての文字に分割することについていくつかの答えがあることを私は知っていますが、これらはかなり質問固有であり、ほとんどが単一の文字列に関連し、複数の文字列のデータフレームには関連していません。
データ例
df <- data.frame(id = 1:2, seq = c('ABCDEFGHI', 'ZABCDJHIA'))
このように見えます:
id seq
1 1 ABCDEFGHI
2 2 ZABCDJHIA
3文字ごとに分割
結果のデータフレームが次のようになるように、各行の文字列を3番目の文字ごとに分割します。
id 1 2 3
1 ABC DEF GHI
2 ZAB CDJ HIA
私が試したこと
splitstackshape
以前を使用して、次のように1つの文字で文字列を分割df %>% cSplit('seq', sep = '', stripWhite = FALSE, type.convert = FALSE)
しました。3つおきの文字で分割する同様の関数(またはcSplitで可能)が欲しいです。
オプションは separate
library(tidyverse)
df %>%
separate(seq, into = paste0("x", 1:3), sep = c(3, 6))
# id x1 x2 x3
#1 1 ABC DEF GHI
#2 2 ZAB CDJ HIA
より一般的なものを作成したい場合
n1 <- nchar(as.character(df$seq[1])) - 3
s1 <- seq(3, n1, by = 3)
nm1 <- paste0("x", seq_len(length(s1) +1))
df %>%
separate(seq, into = nm1, sep = s1)
またはbase R
、を使用して、を使用strsplit
して、正規表現ルックアラウンドをaに渡し、list
次に要素に渡すことにより、3文字のインスタンスごとに「seq」列を分割rbind
しlist
ます。
df[paste0("x", 1:3)] <- do.call(rbind,
strsplit(as.character(df$seq), "(?<=.{3})", perl = TRUE))
注:数字などの非標準のラベルで始まる列名は避けることをお勧めします。そのため、名前の先頭に「x」を追加しました
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加