2017-11-06 34 views
6

Tôi muốn tìm và trích xuất từ ​​dài nhất của một chuỗi, nếu có thể bằng cách sử dụng gói tidyverse.Trích xuất từ ​​dài nhất trong chuỗi

library(tidyverse) 

tbl <- tibble(a=c("ab cde", "bcde f", "cde fg"), b=c("cde", "bcde", "cde")) 
tbl 
# A tibble: 3 x 1 
    a 
<chr> 
1 ab cde 
2 bcde f 
3 cde fg 

Kết quả Tôi đang tìm kiếm là:

# A tibble: 3 x 2 
    a  b 
    <chr> <chr> 
1 ab cde cde 
2 bcde f bcde 
3 cde fg cde 

Các bài gần nhất với câu hỏi tôi đã tìm thấy là thế này: longest word in a string. Có ai có một ý tưởng cho một cách đơn giản hơn?

+0

Kể từ khi bạn yêu cầu một giải pháp tidyverse có thể, một khả năng tương đương với câu trả lời bằng cách PoGibas thể được 'thư viện (tidyverse); tbl%>% mutate (b = map_chr (strsplit (a, ""), ~. [which.max (nchar (.))])) ' – markdly

+3

@markdly làm giải pháp yêu cầu gọn gàng OP, vui lòng xem xét phục hồi câu trả lời của bạn. – zx8754

+0

Tôi thứ hai -^ – Sotos

Trả lời

13

Giải pháp sử dụng cơ sở R:

# Using OPs provided data 
tbl$b <- sapply(strsplit(tbl$a, " "), function(x) x[which.max(nchar(x))]) 

Giải thích:

  • Chia mỗi dòng diễn tả bằng lời (strsplit)
  • Xác định từ chiều dài (nchar)
  • Chọn các từ đó là dài nhất trong dòng (which.max)
7

Và đây là một phiên bản có thể tidyverse của câu trả lời @ PoGibas của

library(tidyverse) 
tbl <- tibble(a=c("ab cde", "bcde f", "cde fg")) 

tbl %>% 
    mutate(b = map_chr(strsplit(a, " "), ~ .[which.max(nchar(.))])) 

#> # A tibble: 3 x 2 
#>  a  b 
#> <chr> <chr> 
#> 1 ab cde cde 
#> 2 bcde f bcde 
#> 3 cde fg cde 
Các vấn đề liên quan