[英]R, gsub(), replace “.” for “,” given some conditions
我有像這樣的數據
obs Var1
1 36.091
2 14.678
3 3.12
我的問題是我想要替換"."
用","
和gsub()
,但不是所有的觀察,只是對於點右邊有3個字符的觀察(".")
。 在這種情況下,觀察1和2。
我想的是:
if ( nchar(something indicating the characters to the right of ".") >= 3){
gsub(".",",",data[,1])
}
else {}
我不知道這是不是正確的方法,但我不知道另一種方法。
謝謝
您可以使用基於前瞻性的正則表達式。 僅當點后跟至少三個字符時,這將用逗號替換點。
> x <- c('36.091', '14.678', '3.12')
> gsub("\\.(?=.{3})", ",", x, perl=T)
[1] "36,091" "14,678" "3.12"
> df <- data.frame(obs=c(1,2,3), Var1=c('36.091', '14.678', '3.12'))
> df$Var1 <- gsub("\\.(?=.{3})", ",", df$Var1, perl=T)
> df
obs Var1
1 1 36,091
2 2 14,678
3 3 3.12
要么
> gsub("\\.(.{3})", ",\\1", x)
[1] "36,091" "14,678" "3.12"
如果你想要更准確一點,那么將前瞻或捕獲組中的點替換為\\\\d
,它與一個數字字符完全匹配。
gsub("\\.(?=\\d{3})", ",", x, perl=T)
gsub("\\.(\\d{3})", ",\\1", x)
另一種方法是使用strsplit
,但看起來很亂:
gg$Var1<-do.call(rbind,
lapply(gg$Var1,function(x)
ifelse(
nchar(strsplit(x,"\\.")[[1]][2])==3,sub("\\.",",",x),x)))
> gg
obs Var1
1 1 36,091
2 2 14,678
3 3 3.12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.