我试图查看data(movies)
中的library(ggplot2movies)
,并且试图计算归类为random-year
类型的n
中的电影总数。
例如,如果n=2
,则表示我正在计算归类为两种类型的电影。电影X可能是一部喜剧和浪漫片。然后,可以使用下面的此功能对这部电影X进行计数。
例如,我可能正在看:
movies_released_2000 = data.frame(movies$year==2000)
我所做的是:
nums_movies <- function(input_df, n) {
counts = lapply(input_df,rowSums)
if (counts == n){
break}
}
希望返回:
nums_movies(movies_released_2000[18:24],3)
# [1] 5 # five movies released in 2000 were classified into three genres at the same time
我所做的是使用lapply
计算每部电影的行总和,然后只返回那些行总和等于n的电影。
但这给我带来了
问题Error in FUN(X[[i]], ...) :
'x' must be an array of at least two dimensions
我希望计算的是被归类为n个流派的电影总数。例如,如果我输入nums_movies(movies_released_2000[18:24],3)
,它将为我提供一个整数,该整数可计算2000年发行的电影分为三种不同类型(例如,可能分为“喜剧”,“浪漫”,“惊悚片” ”)。
答案 0 :(得分:0)
以下代码使用reshape2库和melt()方法将数据帧转换为所谓的熔融格式,该格式将流派作为列名重塑为流派,并将流派中的0或1标志重塑为行。然后plry库将它们汇总并返回所有年份的所有值,然后可以轻松地按感兴趣的年份对子集进行设置(或可以将其放入函数中以将年份作为参数传递)
库(ggplot2movies) 库(reshape2) 库(plyr)
data(movies)
movies <- movies[,c("year","Action","Animation","Comedy","Drama","Documentary","Romance","Short")]
movies <- melt(movies,"year",variable.name="genre",value.name="in_genre")
movies_by_genre_year <- ddply(movies,.(year,genre),summarise,total=sum(in_genre))
movies_by_genre_year[movies_by_genre_year$year==2000,]
因此,在2000年的示例中,以下流派计算了以下电影数量:
year genre total
750 2000 Action 154
751 2000 Animation 89
752 2000 Comedy 561
753 2000 Drama 793
754 2000 Documentary 175
755 2000 Romance 207
756 2000 Short 449
每个注释,使用基数R的附加答案
data(movies)
movies <- as.data.frame(movies[,c("year","Action","Animation","Comedy","Drama","Documentary","Romance","Short")])
year <- 2000
movies<-lapply(movies[movies$year==year,c(2:7)],sum)
data.frame(year=year,m)
更新显示按n种指定流派的电影计数:
data(movies)
movies <- as.data.frame(movies[,c("year","Action","Animation","Comedy","Drama","Documentary","Romance","Short")])
year <- 2000
n <- 3
matches <- apply(movies[movies$year==year,c(2:7)],1,function(x) { sum(x)==n })
data.frame(year=year,n=n,multi_genres_count=sum(matches))
在2000年,共有3部流派的58部电影被列出
year n multi_genres_count
1 2000 3 58