2013-03-15 17 views
2

我已經寫了這個來找到任何「1:」到「9:」的實例,並用「01 :「到」09:「,同時離開」10:「或更大的完整。下面是一個示例腳本:把0放在數字前面<= 9(for循環在r中只在最後一個實例上工作)

region = c("18:1-100","16:1-100","X:1-100","2:1-100","4:1-100") 

to.replace=grep("^[[:digit:]]:", region) 
replacement=grep("^[[:digit:]]:", region, value=T) 
replacement=paste(0,replacement,sep="") 

for (i in length(to.replace)){ 
    region[to.replace[i]]=replacement[i] 
} 

它僅適用於最後一次出現在「區域」因此,我認爲有什麼毛病我的for循環,我只是不知道是什麼。

+0

你缺少1:在你的循環,對於'(我在長(to.replace))' - >'for(i in 1:length(to.replace))' – 2013-03-15 11:53:17

+1

@Hemmo查看'seq_len'這個 – Roland 2013-03-15 11:55:40

+0

@Hemmo非常感謝,也有效!現在我覺得自己就像一個數字! – 2013-03-15 11:58:31

回答

4

只需更換你與循環:

region[to.replace] <- replacement 
+0

輝煌 - 非常感謝! – 2013-03-15 11:54:20

+0

+1簡單,優雅。 – 2013-03-15 12:00:11

0

你可以通過它與lapply運行...

region = c("18:1-100","16:1-100","X:1-100","2:1-100","4:1-100") 
lapply(region , function(x){ r <- grepl("^[[:digit:]]:", x) ; ifelse(r , paste0(0 , grep("^[[:digit:]]:", x , value=T)) , x) }) 
相關問題