2017-07-04 4 views
1

内の1つの列でTRUE、変更値が、私は文字ベクトルがある場合:(図示短縮版)私は、次の条件を適用したい他の列

Unit <- c("e10", "e11", "10e10", "10e11") 

を:値が「E」で始まる場合は、交換してください最終的なベクターは、このようになりますように、 '10E' が 'E':

startsWith.e <- startsWith(Unit, "e") 
"10e10" "10e11" "10e10" "10e11" 

私は()TRUE/FALSEベクトルを作成するためのstartsWithを使用これは、TRUE TRUE FALSE FALSEを返します。

最後に、forまたはwhileループ(または何らかの種類の条件付き)を実行したいので、startsWith.eがTRUEの場合、Unitの値 'e'が '10e'に置き換えられます。

while(startsWith.e){ 
grep("e", "10e", Unit) } 

しかし、私は無限ループで立ち往生し、文はそれだけで最初の文を評価する(したがって、それはTRUEを評価するため、すべてのケースを変更する)と言っている場合は使用します。

誰かが助けてくれることを願っています!

+0

あなたはこのrexexなし 'ユニット[のstartsWith(単位、 "E")] <解決することができ、独自のメソッドを使用して - paste0( "10"、ユニット[のstartsWith(単位、 "e" を)])'か同様に 'Unit [substr(Unit、1,1)==" e "] < - paste0(" 10 "、Unit [substr(Unit、1,1)==" e "])' –

答えて

4

これにはsubを使用できます。文字列の先頭(^)で文字 'e' を一致させるとstartsWithとサブセットを使用した '10E'

sub("^e", "10e", Unit) 
#[1] "10e10" "10e11" "10e10" "10e11" 
+0

ありがとう!!これは完全に機能しました。 – pdench

1

と交換してください、あなたは何ができる

Unit 
[1] "10e10" "10e11" "10e10" "10e11" 
を返し

Unit[startsWith(Unit, "e")] <- paste0("10", Unit[startsWith(Unit, "e")]) 

0

forを使用したい場合は、このようにしてください(これはlmoの回答のより長いバージョンです):

Unit <- c("e10", "e11", "10e10", "10e11") 
startsWith.e <- startsWith(Unit, "e") 
for (i in 1:length(Unit)) { 
if (startsWith.e[i]) { 
    Unit[i] <- paste0("10", Unit[i]) 
    } 
} 
Unit 
#> [1] "10e10" "10e11" "10e10" "10e11" 
0

はなぜGSUBを使用していない(私の答えは、冗長な... @akrunはすでにサブでそれを解決していますか)..?

Unit <- c("e10", "e11", "10e10", "10e11") 
gsub("^e","10e",Unit) 
[1] "10e10" "10e11" "10e10" "10e11"