2017-11-06 94 views
6

tidyverse paketini kullanarak bir dizenin en uzun sözcüğünü bulmak ve ayıklamak istiyorum.Dize içindeki en uzun sözcüğü ayıkla

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 

aradığım sonucudur: longest word in a string:

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

buldum konusuna yakın sonrası budur. Daha basit bir yol için bir fikri olan var mı?

+0

@ PoGibas en cevabın olası tidyverse versiyonu, PoGibas tarafından cevap olası bir eşdeğer kitaplığı (tidyverse) 'da olabilir; tbl%>% mutate (b = map_chr (strsplit (a, ""), ~. [which.max (nchar (.))])) – markdly

+3

@ OP talep edilen ters çözüm olarak @markdly, cevabınızın silinmesini geri almayı düşünün. – zx8754

+0

İkincisi -^ – Sotos

cevap

13

çözüm kullanılarak temel R:

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

Açıklama:

  • Bölünmüş bir deyişle her bir hat (strsplit)
  • belirlemek kelime uzunluğu (nchar)
  • seç en uzun kelime satır (which.max)
7

Ve burada olası bir tidyverse çözüm için sorulan bu yana

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