x <- c("AB.38.2", "GF.40.4", "ABC.34.2")
などの変数名を含む文字ベクトルがあります。文字を抽出して、文字のみを含む文字ベクトルを作成したいと思います。 c("AB", "GF", "ABC")
。
文字数が異なるため、substring
を使用して最初と最後の文字を指定することはできません。
これについてどうすればいいですか?
あなたが試すことができます
sub("^([[:alpha:]]*).*", "\\1", x)
[1] "AB" "GF" "ABC"
以前の回答は必要以上に複雑に思われます。 この質問 数字に関しては文字でも機能します:
> x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd", " a")
> gsub("[^a-zA-Z]", "", x)
[1] "AB" "GF" "ABC" "ABCFd" "a"
スペースを含む文字が混在している場合、どの回答も機能しません。これらの場合のために私がやっていることはここにあります:
x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd")
unique(na.omit(unlist(strsplit(unlist(x), "[^a-zA-Z]+"))))
[1]「AB」「GF」「ABC」「A」「B」「C」「Fd」
これが私がこの問題を解決する方法でした。 5つのアイテムをきれいに返し、単語の間にスペースが必要かどうかを制御できるため、これを使用します。
x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd", " a")
extract.alpha <- function(x, space = ""){
require(stringr)
require(purrr)
require(magrittr)
y <- strsplit(unlist(x), "[^a-zA-Z]+")
z <- y %>% map(~paste(., collapse = space)) %>% simplify()
return(z)}
extract.alpha(x, space = " ")
これは古い質問だと思いますが、今、同じような答えを探していて見つけたので、共有したいと思いました。
私が見つけた最も簡単で最速の解決策:
x <- c("AB.38.2", "GF.40.4", "ABC.34.2")
only_letters <- function(x) { gsub("^([[:alpha:]]*).*$","\\1",x) }
only_letters(x)
そして出力は:
[1] "AB" "GF" "ABC"
これが誰かを助けることを願っています!