【问题标题】:How to fix 'Undefined columns selected' error in R?如何修复 R 中的“未定义列选择”错误?
【发布时间】:2019-05-19 19:01:19
【问题描述】:

我正在开发一个电影推荐系统(学校项目)。对于这个项目,人们对电影进行了评级。当有人没有看到电影时,数据集中会显示 NA。因此,我正在寻找一种方法来摆脱没有人看过的电影。这些是每个人都有 NA 的行。

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

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

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

【问题讨论】:

    标签: r subset


    【解决方案1】:

    您可以使用 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
    > 
    

    【讨论】:

    • 你也可以ratingMovie[rowSums(is.na(ratingMovie[3:5])) != 3, ]
    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多