Посмотрите, находится ли «root слово» внутри «полного слова», используя r - PullRequest
0 голосов
/ 19 марта 2020

У меня есть данные, которые выглядят следующим образом:

 head(orthographic)
         Word   Root
 1     manful    man
 2     carful   care
 3  basketful basket
 4 meaningful   mean
 5     boxful    box
 6    armsful   <NA>

И я хотел бы видеть, находится ли слово Root в пределах Word. Например, man содержится в manful, и написание не изменяется. Однако car меняется на careful.

My ideal output
        Word   Root      C
1     manful    man     No
2     carful   care     Yes
3  basketful basket     No
4 meaningful   mean     No
5     boxful    box     No
6    armsful   <NA>     <NA>

То, что я пробовал (основываясь на сообщениях других):

a=orthographic$Word
b=orthographic$Root

df$a %in% df$b
charmatch(df$a,df$b)
grepl(df$a,df$b)
grep(df$a,df$b)

Однако ни один из них не дал мне вывод Я хочу. В частности, все произведенные коды:

2     carful   care     "NO" # (Instead of "Yes").

Я ценю любые входные данные / решения.

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Мы можем использовать str_detect из stringr

df$C <- c("Yes", "No")[stringr::str_detect(df$Word, df$Root) + 1]
df$C[is.na(df$Root)] <- NA
df
#        Word   Root    C
#1     manful    man   No
#2     carful   care  Yes
#3  basketful basket   No
#4 meaningful   mean   No
#5     boxful    box   No
#6    armsful   <NA> <NA>

data

Хранить данные в виде символов, а не факторов.

df <- structure(list(Word = c("manful", "carful", "basketful", "meaningful", 
"boxful", "armsful"), Root = c("man", "care", "basket", "mean", 
"box", NA)), row.names = c("1", "2", "3", "4", "5", "6"), class = "data.frame")
0 голосов
/ 19 марта 2020

В качестве альтернативы используйте оператор ifelse (кредит @Ronak Shah за идею использования str_detect)

df$C <- ifelse(str_detect(df$Word, df$Root), "No", "Yes")
df
        Word   Root    C
1     manful    man   No
2     carful   care  Yes
3  basketful basket   No
4 meaningful   mean   No
5     boxful    box   No
6    armsful   <NA> <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...