R中LEFT加FIND函数的等价函数是什么?

3

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

数据:

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)

1
df$date <- sub('(^.*?),.*', '\\1', df$texts) - alistaire
工作得很好,非常感谢!1 - Anubhav Dikshit
3个回答

3

您可以使用 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))

谢谢解释!值得点赞。 - Anubhav Dikshit

2

为什么不直接使用以下方法:

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

1
这是一个简单的选项。再加一。 - akrun

0

你可以做到

l <- strsplit (df$date, split = ",")

使用逗号分割文本,然后进行操作。

sapply (l, "[", 1)

只保留第一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接