Используйте библиотечную функцию в функции применения - PullRequest
1 голос
/ 29 марта 2019

У меня есть фрейм данных со столбцом с именем «msgText», который содержит тексты. Для этого я хочу создать еще один столбец с именем «wordcount», который подсчитывает, сколько слов содержит каждая строка «msgText».

Столбец выглядит следующим образом:

head(all_transcripts$msgText)
[1]  "Hi, my name is Chris and I am a programmer"                                                                                                                                                                                                   
[2]  "I have worked with R for 12 years"                                                                                                                                                                                                                                                                                                                                                           
[3]  "Being a programmer I have many questions" 
[4]  "The fellow programmers at Stackoverflow help me to get the answer"                                                                                                                                                                                  
[5]  "This help has saved my life many times."                                                                                                                                                                                                                                                                                                                                                                                                        
[6]  "Thanks Stackoverflow!"      

И результат, который я хотел бы получить:

head(all_transcripts$wordcount)
    [1]  10                                                                                                                                                                                                   
    [2]  8                                                                                                                                                                                                                                                                                                                                                           
    [3]  7 
    [4]  11                                                                                                                                                                                  
    [5]  8                                                                                                                                                                                                                                                                                                                                                                                                        
    [6]  2  

Для этого я использую библиотеку ngram с функцией wordcount.

Я пробовал:

all_transcripts$wordcount <- apply(all_transcripts, 2, 
                                   wordcount(all_transcripts$msgText))

Однако, делая это, я получил следующую ошибку:

Error in match.fun(FUN) :    'wordcount(all_transcripts$msgText)' is
not a function, character or symbol

Как правильно использовать функцию apply, не используя цикл for в моем наборе данных?

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Мы можем циклически проходить через элементы «msgText» и применять функцию wordcount

library(ngram)
library(tidyverse)
all_transcripts %>%
     mutate(wordcount = map_int(msgText, wordcount))
#                                                             msgText wordcount
#1                        Hi, my name is Chris and I am a programmer        10
#2                                 I have worked with R for 12 years         8
#3                          Being a programmer I have many questions         7
#4 The fellow programmers at Stackoverflow help me to get the answer        11
#5                           This help has saved my life many times.         8
#6                                             Thanks Stackoverflow!         2

Или с base R

all_transcripts$wordcount <- sapply(all_transcripts$msgText, wordcount)

Проблема в коде OP заключается в том, что он перебирает столбец (MARGIN = 2 in apply), где вектор (alltranscripts$wordcount) не имеет атрибута dim

data

all_transcripts <- structure(list(msgText = c("Hi, my name is Chris and I am a programmer", 
"I have worked with R for 12 years", "Being a programmer I have many questions", 
"The fellow programmers at Stackoverflow help me to get the answer", 
"This help has saved my life many times.", "Thanks Stackoverflow!"
)), class = "data.frame", row.names = c(NA, -6L))
0 голосов
/ 29 марта 2019

Рассмотрим векторизацию lengths с strsplit для подсчета слов с использованием базы R:

all_transcripts$word_count <- lengths(strsplit(all_transcripts$text, split=" "))

all_transcripts

#                                                                text word_count
# 1                        Hi, my name is Chris and I am a programmer         10
# 2                                 I have worked with R for 12 years          8
# 3                          Being a programmer I have many questions          7
# 4 The fellow programmers at Stackoverflow help me to get the answer         11
# 5                           This help has saved my life many times.          8
# 6                                             Thanks Stackoverflow!          2

Данные

all_transcripts <- data.frame(text=c("Hi, my name is Chris and I am a programmer",
                                     "I have worked with R for 12 years",
                                     "Being a programmer I have many questions",
                                     "The fellow programmers at Stackoverflow help me to get the answer",
                                     "This help has saved my life many times.",
                                     "Thanks Stackoverflow!"),
                              stringsAsFactors=FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...