【问题标题】:Put a 0 in front of digit <= 9 (for loop in r only working on the last instance)在 digit <= 9 前面放一个 0(for 循环在 r 中仅适用于最后一个实例)
【发布时间】:2013-03-15 11:44:13
【问题描述】:

我写这个是为了找到“1:”到“9:”的任何实例,并将其替换为“01:”到“09:”,同时保持“10:”或更大的完整。这是一个示例脚本:

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 循环有问题,我只是不知道是什么。

【问题讨论】:

  • 你缺少 1: 在你的循环中,for (i in length(to.replace)) -> for (i in 1:length(to.replace))
  • @Hemmo 请参阅seq_len
  • @Hemmo 非常感谢,这也有效!现在我觉得自己像个笨蛋!
  • @Roland 是的,当然也可以,只是想指出代码中的错误,而不是改进。 ;) 无论如何,alexwhan 的解决方案更好。

标签: r for-loop gsub


【解决方案1】:

只需将你的 for 循环替换为:

region[to.replace] <- replacement

【讨论】:

    【解决方案2】:

    您可以使用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 ) } )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      相关资源
      最近更新 更多