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

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

Имя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

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

0
BeginnerByron 16 Апр 2020 в 13:39

1 ответ

Лучший ответ

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

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

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

1
Ronak Shah 16 Апр 2020 в 12:21