首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >if语句中的R警告

if语句中的R警告
EN

Stack Overflow用户
提问于 2019-09-18 10:47:22
回答 2查看 36关注 0票数 1

我正在尝试编写一个循环来遍历数据帧并纠正不正确的值(由universal制作的EG喜剧片将其全球总票房放大1.1倍,而由派拉蒙制作的喜剧片将其国内总票房提高0.8美元)数据帧在不同的列中指定电影、流派、工作室和总票房

代码语言:javascript
复制
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
    }
  }
}

是什么导致了我的错误?

EN

回答 2

Stack Overflow用户

发布于 2019-09-18 11:08:18

我认为你不需要for loop来实现你想要的东西。但是,如果您不实际分享您的数据的玩具示例,就很难知道。dput(head(movies))会这么做的。

使用data.table,操作可能非常简单:

代码语言:javascript
复制
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]
票数 2
EN

Stack Overflow用户

发布于 2019-09-18 11:19:46

正如已经在评论中提到的,显然有更好、更优化的方法来做到这一点。(来自dplyrifelsecase_when),但是如果您必须显式地使用for循环,则可以使用索引对行值进行子集设置,然后检查各种条件。

代码语言:javascript
复制
for (i in seq_len(nrow(movie_data))) {

   if (movie_data$distributor[i] == "Universal" & movie_data$genre[i] == "Comedy")
      movie_data$worldwide_gross[i] <- movies$worldwide_gross[i]/ 1.1
   else if (movie_data$distributor[i] == "Paramount") {
          if (movie_data$genre[i] == "Comedy") {
            movie_data$domestic_gross[i] <- movie_data$domestic_gross[i] - 0.8
      } else if (movie_data$genre[i] == "Drama") {
            movie_data$domestic_gross[i] <- movie_data$domestic_gross[i] - 1.2
     }
   }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57984366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档