私は長いベクトルを持っています。各要素は文字列です。 各文字列は、 '、'で区切られた部分文字列に分割できます。R長い文字列内の部分文字列を新しい部分文字列で置き換える方法
私のベクトルの各文字列に少なくとも1つの「不良」文字列が含まれているかどうかをチェックしたいと思います。そうであれば、その '不良'文字列を含むSUBstring全体を新しい文字列に置き換える必要があります。私は長い関数をループで書いた。しかし、私は簡単な方法でなければならないと誓ってもいいでしょう。 ありがとうございました!
# Create an example data frame:
test <- data.frame(a = c("str1_element_1_aaa, str1_element_2",
"str2_element_1",
"str3_element_1, str3_element_2_aaa, str3_element_3"),
stringsAsFactors = F)
test
str(test)
# Defining my long function that checks if each string in a
# vector contains a substring with a "bad" string in it.
# If it does, that whole substring is replaced with a new string:
library(stringr)
mystring_replace = function(strings_vector, badstring, newstring){
with_string <- grepl(badstring, strings_vector) # what elements contain badstring?
mysplits <- str_split(string = test$a[with_string], pattern = ', ') # split those elements with badstring based on ', '
for (i in 1:length(mysplits)) { # loop through the list of splits:
allstrings <- mysplits[[i]]
for (ii in 1:length(allstrings)) { # loop through substrings
if (grepl(badstring, allstrings[ii])) mysplits[[i]][ii] <- newstring
}
}
for (i in seq_along(mysplits)) { # merge the split elements back together
mysplits[[i]] <- paste(mysplits[[i]], collapse = ", ")
}
strings_vector[with_string] <- unlist(mysplits)
return(strings_vector)
}
# Test
mystring_replace(test$a, badstring = '_aaa', newstring = "NEW")
3つのforループを使用する代わりに、不正な文字列に分割して適切な文字列に結合することができます。 – numbtongue
良いアイデアだが、これは私を助けるつもりはない。私は良いストリングに参加したくありません。私は、新しい部分文字列を含む不正な文字列を含むWHOLE部分文字列を置き換えたいです。 – user3245256