Как я могу сопоставить список строк с другим списком строк?

#r #string #stringr

#r #строка #stringr

Вопрос:

Я студент бакалавриата, впервые изучающий R. Я использую tidyverse пакет (в частности stringr ) в RStudio для переключения первой и последней букв строк в наборе данных Scrabble и сравнения нового столбца с переключенными строками с исходным столбцом для поиска совпадений. Набор данных включает все воспроизводимые слова Scrabble. По сути, я пытаюсь определить, сколько слов все еще являются допустимыми, воспроизводимыми словами после переключения первого и последнего символов.

У меня нет проблем с поиском точных совпадений (например: AHA to AHA или ABAYA to ABAYA ), но неточные совпадения (например: REEL to LEER ) отображаются как FALSE . Вот мой код для точных совпадений:

 scrabble5<-scrabble%>%
  mutate(backwards=str_replace(word, "^(.)(.*)(.)$", "\3\2\1"))%>%
  mutate(match=backwards==word)
  

Я предположил, что добавление any() к последней строке сработает, поэтому код будет читать:

 scrabble5<-scrabble%>%
  mutate(backwards=str_replace(word, "^(.)(.*)(.)$", "\3\2\1"))%>%
  mutate(match=backwards==any(word))
  

Однако, когда я пытаюсь это сделать, match столбец не выводит никаких TRUE значений, только FALSE .

В конечном счете, я хотел бы, чтобы мой match столбец считывался TRUE для всех совпадений, точных или нет.

РЕДАКТИРОВАТЬ: Прошу прощения, если приведенная выше формулировка сбивает с толку. Моя идеальная конечная точка — иметь логический столбец со TRUE значениями, когда одна из переключаемых строк (обозначаемая новым backwards столбцом) совпадает с любой из строк в исходном столбце, word .

Комментарии:

1. я думаю, вы ищете оператор %in%. Он проверяет, присутствует ли элемент (например, слово) в другом объекте (например, вектор строк).

2. REEL!= LEER , поэтому он вернет FALSE . Чему именно вы хотите сопоставить?

Ответ №1:

Не могу найти хороший дубликат (но я уверен, что он где-то есть).

%in% Функция делает то, что вы хотите.

 scrabble5<-scrabble %>%
  mutate(backwards = str_replace(word, "^(.)(.*)(.)$", "\3\2\1")) %>%
  mutate(match = backwards %in% word)