Получение уникального количества из структурированных текстовых данных

Мне интересно, как получить уникальное количество символов из текстовой строки из структурированного набора данных. Это дополнительный вопрос к моему предыдущему сообщению. Я хотел бы получить уникальное количество яблок (закодировано как App), бананов (закодировано как Ban), ананасов (закодировано как Pin), винограда (закодировано как Grp)

    text<- c('AppPinAppBan', 'AppPinOra', 'AppPinGrpLonNYC')
    df<- data.frame(text)

   library(stringr)
   df$fruituniquecount<- str_count(df$A, "App|Ban|Pin|Grp")

   ## I am expecting output as follows:

      text           fruituniquecount
     AppPinAppBan     3
     AppPinOra        2
     AppPinGrpLonNYC  3

person user3570187    schedule 25.02.2019    source источник
comment
да работает, спасибо! ваше здоровье   -  person user3570187    schedule 25.02.2019
comment
Можете ли вы объяснить, почему, например, AppPinGrpLonNYC имеет счет 3? В тексте эта конкретная строка появляется один раз... При просмотре всех строк Grp, Lon и NYC появляются только один раз... Я не понимаю, как входные данные генерируют выходную логику?   -  person Soren    schedule 25.02.2019
comment
@Soren OP пытается подсчитать количество уникальных совпадений для их строки регулярного выражения "App|Ban|Pin|Grp" в каждой записи text. Таким образом, в "AppPinGrpLonNYC" App, Pin и Grp совпадают для 3. LonNYC не соответствует ничему в шаблоне, поэтому игнорируется.   -  person Gregor Thomas    schedule 25.02.2019
comment
да правильно, я ищу уникальные и именно эти строки   -  person user3570187    schedule 25.02.2019


Ответы (2)


Следуя той же идее, что и принятый ответ на ваш предыдущий вопрос, вы можете сделать,

library(stringr)

sapply(str_extract_all(df$text, "App|Ban|Pin|Grp"), function(i)length(unique(i)))
#[1]3 2 3
person Sotos    schedule 25.02.2019

Возможно, это можно сделать с помощью базы R, не нужны внешние пакеты.

m <- gregexpr("App|Ban|Pin|Grp", df$text)
df$fruituniquecount <- lengths(lapply(regmatches(df$text, m), unique))

df
#             text fruituniquecount
#1    AppPinAppBan                3
#2       AppPinOra                2
#3 AppPinGrpLonNYC                3
person Rui Barradas    schedule 25.02.2019