В следующем коде используются библиотека reshape2 и метод melt (), чтобы преобразовать фрейм данных в так называемый расплавленный формат, который преобразует жанры как имена столбцов в жанры как строки вместе с флагом 0 или 1 нахождения в жанре.,Затем библиотека plry агрегирует их и возвращает все значения за все годы, которые затем легко устанавливаются под интересующим годом (или могут быть вставлены в функцию для передачи года в качестве аргумента)
library (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 году, 58 фильмов были перечислены в 3 разных жанрах
year n multi_genres_count
1 2000 3 58