如何修复R中的“选择未定义的列”错误?

时间:2019-05-19 19:01:20

标签: r subset

我正在研究电影推荐系统(学校项目)。人们为此项目给电影评分。当某人看不到电影时,NA将显示在数据集中。因此,我正在寻找一种方法来摆脱没有人看过的电影。这些是每个人都有NA的行。

问题在于并非所有列都用于对电影进行评级。像标题栏一样。如何对包含评分(4:17)的列进行子集设置,并删除这些包含NA的列中的行?

ratingMovie <- ratingMovie[, rowSums(is.na(ratingMovie)) != ncol(ratingMovie), ]

上面的代码我尝试运行,但是我不确定如何在此代码中添加子集。当我运行此代码时,出现错误消息“未定义的列已选择”。

1 个答案:

答案 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
>