【问题标题】:Remove everything after a string in a data frame column with missing values删除数据框列中缺少值的字符串之后的所有内容
【发布时间】:2014-10-28 15:16:29
【问题描述】:

我有一个类似于下面摘录的数据框:

Observation Identifier   Value
Obs001      ABC_2001     54
Obs002      ABC_2002     -2
Obs003                   1
Obs004                   1 
Obs005      Def_2001/05  

我想将此数据框转换为一个数据框,其中 "_" 符号之后的部分字符串将被删除:如下图所示:

Observation Identifier_NoTime   Value
Obs001      ABC                 54
Obs002      ABC                 -2
Obs003                          1
Obs004                          1 
Obs005      Def  

我尝试使用此处讨论的 strsplitgsubsub 进行试验,但不能强制这些推荐起作用。我必须考虑以下事实:

  1. 列有缺失值,我想将它们留在原处
  2. 字符串“_”位于变量中的不同位置
  3. 我还想保持数据框的其余部分保持原样

【问题讨论】:

  • 你试过sub("_\\S+","",string,perl=T) 吗?
  • 谢谢,它就像一个魅力。你愿意详细说明一下吗?
  • 然后我把它作为答案。

标签: regex r string gsub strsplit


【解决方案1】:

您可以尝试下面的sub 命令从_ 符号中删除所有非空格字符。

sub("_\\S*", "", string)

说明:

  • _ 匹配文字 _ 符号。
  • \S* 匹配零个或多个非空格字符。

这将删除 _ 符号中的所有字符,

sub("_.*", "", string)

说明:

  • _ 匹配文字 _ 符号。
  • .* 匹配任意字符零次或多次。

【讨论】:

  • 为什么不sub("_.+","",string,perl=T)
  • 为什么不sub("_.*","",string,perl=T) :-) ?
  • 那么在\S 的情况下S 是什么以及其他选项是什么?
  • \s 将匹配任何空格字符 space,tab,newline,carriage return\S 会做相反的操作。不要将 \ 和 S 视为单独的。
  • perl=T 不是这个要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2019-02-11
  • 2012-08-29
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多