R:grepl选择字符串上的第一个字符串

时间:2016-01-20 11:18:37

标签: regex r dataframe grepl

我提前道歉,这可能是一个重复的问题。但是,我刚刚花了两个小时来完成stackoverflow,似乎无法找到解决方案。

我想使用grepl来检测以数字开头的行,这是我尝试使用的内容,但它没有给我严格的答案:

   grep.numeric=as.data.frame(grepl("^[:digit:]",df_mod$name))

我猜问题来自正则表达式"^[:digit:]",但我无法弄明白。

更新

我的数据框看起来像这样,它很大,但下面是一个例子:

  ID       mark         name
   1       whatever     name product
   2       whatever     10 product
   3       whatever     250 product
   4       another_mark other product

我想检测名字以数字开头的产品。

更新2

在下面的示例中应用grep.numeric=grepl("^[[:digit:]]",df_mod$name)给出了正确的答案:

    grep.numeric
   [1] FALSE  TRUE  TRUE FALSE

但是,让我感到疯狂的是当我将这个函数添加到我的真实数据框中时:

   grep.numeric=grepl("^[[:digit:]]",df_mod[217,]$nom)

给我这个结果:

   grep.numeric
   [1] FALSE

但实际上,我所拥有的是:

   df_mod[217,]$nom
   [1]  100 lipo 30 gélules

请帮帮我。

1 个答案:

答案 0 :(得分:1)

显然,您的某些值具有前导空格,因此您可以将正则表达式修改为(或类似的)

grepl("^\\s*[[:digit:]]", df_mod$name)

或使用内置的trimws功能

grepl("^[[:digit:]]", trimws(df_mod$name))