1

次の文字列を定義しましょうs

s <- "$ A; B; C;"

私は次のように翻訳sする必要があります:

"$ A; $B; $C;"

セミコロンは区切り文字です。ただし、$は、文字列に表示できる3つの特殊文字の1つにすぎません。データフレームmには、3つの特殊文字がすべて含まれています。

m <- data.frame(sp = c("$", "%", "&"))

私は最初strsplit、セミコロンを区切り文字として使用して文字列を分割していました

> strsplit(s, ";")
[[1]]
[1] "$ A" " B"  " C" 

次のステップは、grepまたはmatchを使用して、最初の文字列にデータフレームで定義された3つの特殊文字のいずれかが含まれているかどうかを確認することだと思いますm。その場合は、gsubを使用して、一致した特殊文字を残りのサブ文字列に挿入します。次に、collapse = ""を指定して貼り付けを使用し、部分文字列を再度マージします。それは理にかなっていますか?

乾杯

4

3 に答える 3

1

このようなものはどうですか?

getmeout = gsub("[$|%|& ]", "", unlist(strsplit(s, ";")))
whatspecial = unique(gsub("[^$|%|&]", "", s))
whatspecial
# [1] "$"
getmeout
# [1] "A" "B" "C"
paste0(whatspecial, getmeout, sep=";", collapse="")
# [1] "$A;$B;$C;"
于 2012-07-18T10:31:40.173 に答える
1

後方参照はそれをワンライナーに変えます:

s <- c( "$ A; B; C;", "& A; B; C;", "% A; B; C;" )
ms = c("$", "%", "&")

s <- gsub( paste0("([", paste(ms,collapse="") ,"]) ([A-Z]); ([A-Z]); ([A-Z]);") , "\\1 \\2; \\1 \\3; \\1 \\4" , s) 

> s
[1] "$ A; $ B; $ C" "& A; & B; & C" "% A; % B; % C"

必要に応じて、正規表現を適切に一般的なもの (複数のスペース、複数の英数字などに一致) にすることができます。

于 2012-07-18T10:44:45.823 に答える
1

1 つの方法を次に示します。

library(stringr)
separator <- '; '

# extract the first part
first.part <- str_split(s, separator)[[1]][1]
first.part
# [1] "$ A"

# try to identify your special character
special <- m$sp[str_detect(first.part, as.character(m$sp))]
special
# [1] $
# Levels: $ & %

# make sure you only matched one of them
stopifnot(length(special) == 1)

# search and replace
gsub(separator, paste(separator, special, sep=""), s)
# [1] "$ A; $B; $C;"

あなたの仮定のいくつかを見逃した場合はお知らせください。

于 2012-07-18T10:37:51.013 に答える