我正在尝试从数据框中的列中提取前几个字符。我需要的是前几个字符,直到遇到“,”。

数据:

texts
12/5/15, 11:49 - thanks, take care
12/5/15, 11:51 - cool

我需要的是
texts                                   date
12/5/15, 11:49 - thanks, take care     12/5/15
12/10/15, 11:51 - cool                 12/10/15

我厌倦了使用它,但这返回了没有列的所有内容
df$date <- sub(", ", "", df$date, fixed = TRUE)

 and

df$date <- gsub( ".,","", df$texts)

Excel 等价物
=LEFT(A1, FIND(",",A1,1)-1)

最佳答案

您可以使用 sub :

sub('(^.*?),.*', '\\1', df$texts)
# [1] "12/5/15" "12/5/15"

模式匹配
  • 行首 ^ 后跟任意字符 . 重复零到无穷次,但尽可能少 *? ,全部捕获 ( ... )
  • 后跟一个逗号 ,
  • 后跟任意字符,重复零到无穷次 .*

  • 这将匹配整行,并将其替换为
  • 捕获的组 \\1


  • 其他选项: substrstrsplitstringr::str_extract

    如果您打算使用上述日期, as.Date (或 strptime ,如果您也想要时间)实际上可以去掉它需要的内容:
    as.Date(df$texts, '%m/%d/%y')`  # or '%d/%m/%y', if that's the format
    # [1] "2015-12-05" "2015-12-05"
    

    数据:
    df <- structure(list(texts = structure(1:2, .Label = c("12/5/15, 11:49 - thanks, take care",
                    "12/5/15, 11:51 - cool"), class = "factor")), .Names = "texts",
                    class = "data.frame", row.names = c(NA, -2L))
    

    关于regex - R 中 LEFT 加 FIND 函数的等价物是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36215022/

    10-11 19:42