如何返回以|分隔的所有可能类别。一栏以下

时间:2019-04-14 19:05:26

标签: r text-mining

我有一个数据集“电影”,其中有一个名为“流派”的列,其值类似于“动作”,“动作|动画”,“动画|幻想”。电影可以具有多种流派。我想输出所有可能的单个类别(例如冒险,幻想)及其频率的列表。换句话说,我想知道有多少部电影具有类型的“动作”,有多少部电影具有“幻想”的类型。我不在乎这些组合。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

如果类型不太多,一种选择是使用函数grepl(),该函数将告诉您是否在字符(例如{{1})中出现了特定字符串(例如'Action')。 }):

'Animation|Fantasy'

答案 1 :(得分:0)

如果要查找每种类型的频率,则在定界符split的'genre'列上执行|,并使用mtabulate

library(qdapTools)
mtabulate(strsplit(as.character(df1$genre), "|", fixed = TRUE))

或使用table中的base R

dat <- stack(setNames(strsplit(as.character(df1$genre), "|", 
           fixed = TRUE), seq_len(nrow(df1))))
lvls <- c("Action', 'Adventure', 'Animation', 'Comedy', 'Fantasy')
dat$values <- factor(dat$values, levels = lvls)
table(dat[2:1])

注意:假设在数据集中找到所有类别

答案 2 :(得分:0)

这是使用R在基础sapply中进行操作的一种简单方法

# sample data frame
df <- data.frame(genre=c("Action", "Action|Animation", "Animation|Fantasy"), stringsAsFactors = F)

# get uniq genre
uniq.genre <- unique(unlist(strsplit(df$genre, split = '\\|')))

# get frequency
sapply(uniq.genre, function(genre) {
  sum(grepl(genre, df$genre))
})
#>    Action Animation   Fantasy 
#>         2         2         1