【问题标题】:Replace character on string with nothing in R用R中的任何内容替换字符串上的字符
【发布时间】:2014-07-19 23:41:48
【问题描述】:

我有一个字符串向量,我想删除向量中每个元素的第 5 个字符。我找到了this answer,但对我帮助不大。

一开始我以为

substr(myvec, 5,5) <- "" 

会成功的。但碰巧这段代码不起作用。

做我打算做的事情的解决方法就是:

paste(substr(myvec, 1,4), substr(myvec, 6,nchar(myvec)), sep="")

但是真的不可能像我打算的那样直接使用 substr 吗? 下面是一个可重现的例子。

myvec <- c("19601Urbana", "19601Rural", "19701Urbana", "19701Rural", "19801Urbana", "19801Rural", "19912Urbana", "19912Rural", "20002Urbana", "20002Rural", "20102Urbana", "20102Rural")

有什么想法吗?我想我可以尝试一些正则表达式,但似乎使用它会有点困难。而且,这似乎有点矫枉过正。

更新:由于有些人说它可以在他们的计算机上运行,​​我的会话信息: R 版本 3.0.0 (2013-04-03) 平台:x86_64-w64-mingw32/x64(64位) 我使用的是 Windows 8。

【问题讨论】:

  • substr(myvec, 5,5) &lt;- "" 有效工作
  • @rawr 真的吗?我试过了,它对我不起作用。例如,您可以设置substr(myvec,5,5) &lt;- "a",但不能设置为空字符串。
  • 我刚刚在“R version 3.1.0 (2014-04-10) Platform: x86_64-apple-darwin10.8.0 (64-bit)”中运行了x&lt;-"aaaaXaa"; x; substr(x,5,5)&lt;-""; x,它删除了“X” .
  • 当我运行z&lt;-"aaaaXaaa";substr(z,5,5)&lt;-"";z 时,我得到:[1] "aaaaXaaa"R version 3.0.3 (2014-03-06) Platform: x86_64-w64-mingw32/x64 (64-bit)
  • 在 ubuntu 12.04、R3.1.1 上为我工作。这个正则表达式(我认为)将在文本 gsub("(.*)\\d(.*)", "\\1\\2", myvec) 开始之前删除数字(虽然它的眼睛很痛;))

标签: r substring


【解决方案1】:

尽管有 cmets,但我得到的结果与您相同。无论出于何种原因,将substr(...) 设置为空字符串什么都不做(在我的系统上)。所以这里有一个解决方法。

ch <- intToUtf8(1)          # non-printing character
substr(myvec,5,5) <- ch     # substitute that
gsub(ch,"",myvec,fixed=T)   # now get rid of it...
#  [1] "1960Urbana" "1960Rural"  "1970Urbana" "1970Rural"  "1980Urbana" ...

是的,这是一个皮塔饼。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多