В R, как применить функцию к каждой строке кадра данных, которая использует значение столбца? - PullRequest
0 голосов
/ 16 апреля 2020

Допустим, у меня есть датафрейм

Автор | Тексты песен |

Имя1 Текст (символы)

Имя2 Текст (символы)

Я хочу создать еще один столбец с помощью функции, которая для каждой строки извлекает текст из текста столбец, разделяется пробелами, затем перебирает каждый токен, чтобы увидеть, находится ли он внутри другого вектора, который я создал (поэтому я могу определить процент токенов в тексте, который находится внутри этого другого вектора).

Функция как я уже писал, ниже

ReturnPercentPosWord = function(textLyrics){

WhitespaceSplitText = strsplit(textLyrics, " ")

LengthSplitText = length(WhitespaceSplitText)

CountInPosList = 0

for (i in WhitespaceSplitText) {

if (i %in% PositiveWords$word) {
  CountInPosList = CountInPosList+1
}

}

 if (CountInPosList == 0) {
return(0)

}

PercentInPos = (CountInPosList/LengthSplitText)*100

return(PercentInPos)}

Я хочу применить эту функцию к каждой строке сейчас. Я пробовал

TestPOSwordsDF$PercentPositiveWords = ReturnPercentPosWord(TestPOSwordsDF$Lyrics)

и

TestPOSwordsDF$PercentPositiveWords = apply(TestPOSwordsDF[, c('Lyrics'),drop=F], 1, ReturnPercentPosWord)

Но я получаю сообщение о том, что the condition has length > 1 and only the first element will be used

Я был бы очень признателен за любую помощь в этом. Спасибо!

1 Ответ

1 голос
/ 16 апреля 2020

Попробуйте использовать это:

TestPOSwordsDF$PercentPositiveWords <- sapply(
                   strsplit(TestPOSwordsDF$Lyrics, " "), function(x) 
                   mean(x %in% PositiveWords$word) * 100)

Здесь мы разделим Lyrics на пробелы, получим соотношение слов, присутствующих в PositiveWords$word.

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