首页 > 解决方案 > if语句中的R警告

问题描述

我正在尝试编写一个遍历数据框并纠正错误值的循环(通用制作的 EG 喜剧将其全球总收入乘以 1.1,派拉蒙制作的喜剧将其国内总收入增加 0.8 美元)数据框指定电影,不同列中的流派、工作室和总收入

for (i in 1:nrow(movie_data)) {
  movies <- movie_data[i,]
  if (distributor == "Universal") {
    if (genre == "Comedy") {
      movies$worldwide_gross <- movies$worldwide_gross / 1.1
    } 
  } else if (distributor == "Paramount") {
    if (genre == "Comedy") {
      movies$domestic_gross <- movies$domestic_gross - 0.8
    } else if (genre == "Drama") {
      movies$domestic_gross <- movies$domestic_gross - 1.2
    }
  }
}

什么会导致我的错误?

标签: r

解决方案


我认为你不需要 afor loop来实现你想要的。但是,如果您实际上不共享数据的玩具示例,则很难知道。dput(head(movies))会做的。

操作data.table可以很简单:

library(data.table)

setDT(movies)

movies[distributor == "Universal" & genre == "Comedy", 
       worldwide_gross := worldwide_gross / 1.1]

movies[distributor == "Paramount" & genre == "Comedy", 
       domestic_gross := domestic_gross - 0.8]

movies[genre == "Drama", 
       domestic_gross - 1.2]

推荐阅读