【问题标题】:gsub in for loop not running?for循环中的gsub没有运行?
【发布时间】:2020-06-09 03:25:01
【问题描述】:

由于某种原因,我的 for 循环中的这条 gsub 行没有执行。基本上,我希望做的是一个元素开头和结尾的特定字符,我想把它拿出来。因此,在我的示例代码中,我只保留以 0 开头的值,否则将其删除(在代码中,我正在处理存储在矩阵中的所有内容都是字符向量,我想要做的是删除重复的特定每个向量的开头和结尾的字符)。但是,一旦我的脚本完成运行,m2 就没有任何改变

m2 <- matrix( c(2, 0, 0, 0, 2, 0, 0, 0, 2), nrow=3, ncol=3)
rownames(m2) <- c("a", "d", "e")
colnames(m2) <- c("x", "w", "z")

for (i in 1:length(rownames(m2))){
  for (j in 1:length(colnames(m2))){
    if (substr(m2[i,j], 1, 1) == "0") {
      m2 <- m2
    } else (m2 <- gsub("^.", "", m2))
  }
}

【问题讨论】:

  • 替换为 m2,mat 是我原始脚本的一部分

标签: r loops gsub


【解决方案1】:

m2 中替换不以 0 开头的任何内容,您可以使用 startsWith

m2[!startsWith(as.character(m2), "0")] <- ''
m2

#   x   w   z  
#a ""  "0" "0"
#d "0" ""  "0"
#e "0" "0" "" 

【讨论】:

  • 如何处理字符串?所以说我有一堆随机字符串,我想去掉所有出现在字符串开头和结尾的“a”,这样像“abba”这样的字符串就会变成“bb”?
  • @JohnAbercrombie 这似乎与您显示的数据m2 无关。请使用您拥有的数据更新您的帖子,并显示预期的输出。
  • 你可能需要gsub('^a|a$', '', 'abba') ?
【解决方案2】:

我们可以使用replace

replace(m2, m2 != 0, "")
#    x   w   z  
#a ""  "0" "0"
#d "0" ""  "0"
#e "0" "0" "" 

如果我们需要`替换不以'0'开头的值

replace(m2, substr(m2, 1, 1) != 0, "")
#   x   w   z  
#a ""  "0" "0"
#d "0" ""  "0"
#e "0" "0" "" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多