我正在研究电影推荐系统(学校项目)。人们为此项目给电影评分。当某人看不到电影时,NA将显示在数据集中。因此,我正在寻找一种方法来摆脱没有人看过的电影。这些是每个人都有NA的行。
问题在于并非所有列都用于对电影进行评级。像标题栏一样。如何对包含评分(4:17)的列进行子集设置,并删除这些包含NA的列中的行?
ratingMovie <- ratingMovie[, rowSums(is.na(ratingMovie)) != ncol(ratingMovie), ]
上面的代码我尝试运行,但是我不确定如何在此代码中添加子集。当我运行此代码时,出现错误消息“未定义的列已选择”。
答案 0 :(得分:2)
您可以将apply与all(is.na)
函数一起使用以获取所有NA行的索引。然后从数据框中删除它们。我在这里创建了一个示例:
movieID <- c(1:5)
movieTitle <- c("Movie1", "Movie2", "Movie3", "Movie4", "Movie5")
student1 <- c(1, NA, 2:4)
student2 <- c(2, NA, 2, NA, 4)
student3 <- c(NA, NA, 1:3)
ratingMovie <- data.frame(movieID, movieTitle, student1, student2, student3)
movieID movieTitle student1 student2 student3
1 1 Movie1 1 2 NA
2 2 Movie2 NA NA NA
3 3 Movie3 2 2 1
4 4 Movie4 3 NA 2
5 5 Movie5 4 4 3
>
index <- apply(ratingMovie[, c(3:5)], 1, function(x) all(is.na(x)))
ratingMovie <- ratingMovie[!index,]
movieID movieTitle student1 student2 student3
1 1 Movie1 1 2 NA
3 3 Movie3 2 2 1
4 4 Movie4 3 NA 2
5 5 Movie5 4 4 3
>