【问题标题】:Character matching in RR中的字符匹配
【发布时间】:2012-11-07 01:24:44
【问题描述】:

在 R 中,我有表:

Field1

&&hello
&hi
Hello
Hi

如何删除以“&”开头的所有内容?

gsub("&", "", A$Field1) 

只会删除“&”,但不会删除“&&hello”或“&hi”,因为我需要它。 我试过“&*”或“&+”,但还是不行。

【问题讨论】:

  • 如果问题中似乎提到了这与上一个问题有关,请编辑并添加一个指向上一个问题的链接。
  • 我添加了正则表达式标签,因为这(以及您之前的问题)几乎肯定只需要正确的正则表达式。但是您可能想在将数据加载到 R 之后 澄清数据的确切结构。数据框?矩阵?矢量?
  • 为了简化@joran 的评论:table 是什么?Rtable 类,坦率地说,我怀疑这个数据结构类似于table 类的对象。 (查看?tableHairEyeColor,这是每个标准发行的 R 安装附带的数据集)。

标签: regex r


【解决方案1】:

使用gsub,需要匹配整个字符串:

gsub("^&.*", "", A$Field1)

但我发现 ifelsegrepl 的组合更优雅一点:

ifelse(grepl("^&", A$Field1), "", A$Field1)

如果目标是在您的数据框中替换它,那么您可以重新分配:

A$Field1 <- ifelse(grepl("^&", A$Field1), "", A$Field1)

【讨论】:

  • ^&amp; 应该足够了,您不必检查所有但换行符的一次或多次出现。 grepl 更快,ifelse 是邪恶的 =D(因为它会在返回时进行长度强制)。我宁愿获得一个逻辑向量来对所需对象应用索引...无论是vector 还是data.frame
  • @aL3xa,谢谢,但我的回答假设A 是一个data.frame,并且用户想要就地替换Field1 列。考虑到这一点,输出的长度必须与 A$Field1 一样长,并且您的任何评论都不适用。
  • 谢谢!我会尝试@工作。看起来正是我想要的。我会尝试 gsub 和 ifelse
【解决方案2】:

我不是 100% 确定你在问什么,但如果你想删除其中带有 & 符号的行,你可以使用:

a <- c("&hi", "&&hello", "Hello", "Hi")

b <- a[-grep("&", a)]

> b
[1] "Hello" "Hi" 

干杯, 吉姆

【讨论】:

  • 如果a 没有匹配&amp; 的此类元素,a[!grepl(...)] 会更安全。
  • grapl 将删除记录。但我需要留下空记录 - 用“”或“”替换 &&
猜你喜欢
  • 1970-01-01
  • 2022-08-03
  • 2022-01-02
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2015-08-10
  • 2013-05-29
  • 2013-04-15
相关资源
最近更新 更多