【问题标题】:Struggling with for-loop and mutate in RR中的for循环和变异
【发布时间】:2018-12-18 16:18:23
【问题描述】:

我正试图围绕 R 转转,我确信我在做一些愚蠢的事情。

我有一个数据框,其中包含 30 个品牌(我将它们的名称分别放在一个名为“品牌”的列表中)和一个我希望插入数据框的新名称列表(称为“知名品牌”)。

我正在尝试在 R 数据框中的新列中填充 if 语句的结果(使用“知名品牌”中的名称),但这会继续生成错误消息(“{”中的意外“{”)

我不确定哪里出错了 - 这是我的代码:

for(i in 1:length(brands)){
  plot1a_df <- plot1a_df %>% mutate(known_brands[i] = ifelse(brands[i] >1, 1, 0))
}

用数据来说明(假设 3 x2 列):

plot1a_df = data.frame(brands = c(1,0,2), Misc = c(0,0,0))

这个想法是用 c(0,0,1) 结束第三列(“known_brands”)

【问题讨论】:

  • 请添加一个可重现的数据示例。 dput() 通常就足够了。
  • 您在} 之前缺少一个) 括号
  • RLave、Jozef、Imran:感谢您迄今为止的帮助。我已经编辑了我的代码以考虑您的 cmets。可悲的是,到目前为止所说的都不起作用。我面临的挑战是让一个 for 循环在 dplyr 中运行(在这种情况下是变异)

标签: r for-loop dplyr


【解决方案1】:

使用dplyr添加逻辑列:

library(dplyr)
plot1a_df %>% mutate(is_brand_known = brands %in% brand_list)

iris 数据集的另一个示例。

species_list = c('setosa')
iris %>% mutate(is_setosa = Species %in% species_list)

【讨论】:

    【解决方案2】:
    for (i in 1:30){
      plot1a_df[, known_cols[i]] <- ifelse(plot1a_df[,brands[i]] >1, 1, 0)
      print(plot1a_df[, known_cols[i]])
    }
    

    发现我的解决方案可以在没有 mutate 的情况下实现 - 不过,仍然想知道是否可以在 dplyr 中组合 for 循环(意识到这里有很多评论,但没有高水平的评论(至少让这个傻瓜理解!)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多