Как вернуть логический столбец, пересекая список со столбцом в R - PullRequest
0 голосов
/ 08 марта 2020

У меня есть список negative слов, который имеет 4783 элементов. У меня также есть другой список (dataframe) tf2 с несколькими переменными "user","reuser", "full_text", "range", "user.location", "date2". Я хочу сравнить один столбец списка переменных с списком отрицательных слов.

И, исходя из логического результата, если слово присутствует в 'negative и tf2$full_text; Я хочу создать еще один true или false столбец в tf2.

Я пытаюсь что-то вроде этого. tf3 <- apply(tf2, function(x) (x$negative <- intersect(x["full_text"], ng)))

Но это не хорошо. Можем ли мы также использовать что-то вроде any(ele in x.full_text.split() for ele in negative) в функции?

Я добавляю 10 строк из tf2 кадра данных, как показано ниже:

    structure(list(user = c("jdugger2", "rustedshakles", "hhherm", 
"KnightKiwi", "KeithGrayeb", "Clayconboy1", "goblinhunter44", 
"migueli44271514", "hms_smeagol", "owlwoman911_"), reuser = c("TheOnion", 
"TheOnion", "TheOnion", "TheOnion", "TheOnion", "GA_peach3102", 
"TheOnion", "TheOnion", "TheOnion", "SSG_PAIN"), full_text = c("RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @GA_peach3102: A week-long REDUCTION in VIOLENCE between US, Taliban &amp; Afghan forces is set to begin Friday at midnight\n\nThis will lead…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @TheOnion: Taliban Agrees To Peace Deal Despite Concerns About America’s Human-Rights Record .....co/zMTRk7p8J8 .....co/N1KRAX…", 
"RT @SSG_PAIN: ⚡⚡\nUS, Taliban Announce Peace Deal to Be Signed Next Week .....co/5sEqGQw8K5"
), range = c(140L, 140L, 140L, 140L, 140L, 143L, 140L, 140L, 
140L, 95L), user.location = c("Queens, NY", "", "", "Ecruteak City, Johto", 
"", "Arizona, USA", "Gobowen, England", "", "San Francisco", 
"?HighRockyNews RT for planet)"), date2 = c(21022020L, 21022020L, 
21022020L, 21022020L, 21022020L, 21022020L, 21022020L, 21022020L, 
21022020L, 21022020L)), row.names = c(NA, 10L), class = "data.frame")

Я не знаю, как дать Отрицательный список из 4783 слов здесь. Если мы можем использовать произвольный список из примерно 20 отрицательных слов. Тогда, я думаю, мы сможем это проверить.

1 Ответ

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

Предполагая, что у вас есть вектор слов в negative, вы можете создать шаблон с ними, вставив их вместе, используя paste0, и проверить его с помощью grepl.

negative <- c('word1', 'word2')
tf2$negative <- grepl(paste0('\\b', negative, '\\b', collapse = '|'), tf2$full_text)

Добавлены границы слов в шаблон (\\b), чтобы "is" не совпадало с "this".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...