我有一个字符向量:(缩短版本显示)
Unit <- c("e10", "e11", "10e10", "10e11")
我想应用以下条件:如果值以&#39; e&#39;开头,则替换&#39; e&#39;用&#39; 10e&#39;这样最终的矢量看起来像这样:
"10e10" "10e11" "10e10" "10e11"
我使用startsWith()创建一个TRUE / FALSE向量:
startsWith.e <- startsWith(Unit, "e")
这假设为FALSE FALSE。
最后,我想运行for或while循环(或某种条件),这样当startsWith.e为TRUE时,值为&#39; e&#39;在单位中替换为&#39; 10e&#39;。
while(startsWith.e){
grep("e", "10e", Unit) }
然而,我陷入无限循环并使用if语句表示它只会评估第一个语句(因此会更改所有情况因为它将评估为TRUE)。
希望有人可以提供帮助!
答案 0 :(得分:4)
我们可以使用sub
。在字符串的开头(^
)匹配字母'e'并替换为'10e'
sub("^e", "10e", Unit)
#[1] "10e10" "10e11" "10e10" "10e11"
答案 1 :(得分:1)
使用startsWith
和子集,您可以
Unit[startsWith(Unit, "e")] <- paste0("10", Unit[startsWith(Unit, "e")])
返回
Unit
[1] "10e10" "10e11" "10e10" "10e11"
答案 2 :(得分: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"
答案 3 :(得分:0)
(我的答案是多余的...... @akrun已经用sub解决了它)
为什么不使用gsub ..?
Unit <- c("e10", "e11", "10e10", "10e11")
gsub("^e","10e",Unit)
[1] "10e10" "10e11" "10e10" "10e11"