Цель:

Я просматриваю пример данных Twitter и проверяю, содержат ли мои данные в столбце "Tweet" строку слов "yo creo." Если твит содержит "yo creo,", я хотел бы напечатать «1» в столбце "Subject Expression".

Ошибка:

Я получаю сообщение об ошибке: необходимо подмножество столбцов с допустимым вектором нижнего индекса. x Нижний индекс имеет неверный тип logical. ℹ Должен быть числовым или символьным.

Вот мой код:

#Read in data
MyData <-read.csv("/Users/mydata/Desktop/MyData.csv")

#Append subject expression column to dataframe
MyData$SubjectExpression <- ""

#Count instances of subject expression using select
MyData%>%
  mutate(SubjectExpression)= 
  case_when(
    select(MyData, Tweet, contains("yo creo") == '1')
  )

r
0
Aberdeen24 4 Фев 2022 в 06:47

2 ответа

Лучший ответ

У вас есть несколько проблем.

  • mutate синтаксис data %>% mutate(column = value) - вам нужно сохранить определение нового столбца внутри mutate ().
  • Внутри большинства функций dplyr, включая mutate(), вы можете использовать имена столбцов напрямую и без кавычек. Вам не нужно select() столбец (select() предназначен для сохранения одних столбцов и удаления других)
  • Синтаксис аргумента case_when(): test_1 ~ value_1, test_2 ~ value_2
  • contains() специально создан для имен столбцов, чтобы определить наличие строки в столбце/векторе, мы будем использовать stringr::str_detect
  • mutate() может создавать совершенно новые столбцы. Вам не нужно инициализировать столбец с помощью MyData$SubjectExpression <- "". Вы должны просто удалить эту строку.

Внеся все эти изменения, мы получим следующее:

MyData%>%
  mutate(SubjectExpression = 
    case_when(
      stringr::str_detect(Tweet, "yo creo") ~ 1,
      TRUE ~ 0
    )
  )
0
Gregor Thomas 4 Фев 2022 в 06:53
1
Большое спасибо как за решение, так и за подробное объяснение, как исправить мой код! Я очень ценю это. Это сработало!
 – 
Aberdeen24
4 Фев 2022 в 07:30

Альтернатива base R с использованием grepl

MyData$SubjectExpression <- grepl("yo creo", MyData$Tweet)*1
1
Andre Wildberg 4 Фев 2022 в 06:59