簡體   English   中英

R,gsub(),在某些條件下將“。”替換為“,”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM