【问题标题】:Object Not Found in case_when within pipe在管道内的 case_when 中未找到对象
【发布时间】:2017-10-07 17:15:28
【问题描述】:

我有一个如下所示的数据框:

    gov1rlc gov2rlc gov3rlc gov1vote gov2vote gov3vote
    <int>   <int>   <int>    <dbl>    <dbl>    <dbl>
    3       2      NA    24.35     1.04        0
    2       3       2      NA      24.35       1.04        
    3       2      NA    24.35     1.04        0
    3      NA      NA    54.40     0.00        0
    3      NA      NA    54.40     0.00        0
    3      NA      NA    54.40     0.00        0

此时,我想计算左翼政党的投票份额(gov1rlc、gov2rlc、gov3rlc 等于 3),为此我使用以下代码:

d <- d %>% mutate(left_share=case_when(gov1rlc==3&gov2rlc==3&gov3rlc==3~gov1vote+gov2vote+gov3vote,
         gov1rlc==3&gov2rlc==3&gov3rlc!=3~gov1vote+gov2vote,
         gov1rlc==3&gov2rlc!=3&gov3rlc==3~gov1vote+gov3vote,
         gov1rlc==3&gov2rlc!=3&gov3rlc!=3~gov1vote,
     gov1rlc!=3&gov2rlc!=3&gov3rlc!=3~0,
     gov1rlc!=3&gov2rlc==3&gov3rlc==3~gov2vote+gov3vote,
     gov1rlc!=3&gov2rlc==3&gov3rlc!=3~gov2vote,
     gov1rlc!=3&gov2rlc!=3&gov3rlc==3~gov3vote))`

但是,之后我得到了Error in mutate_impl(.data, dots) : object 'gov1rlc' not found,考虑到我在管道中,并且相同的代码在另一台计算机上运行,​​这真的很奇怪。

如果我在每个对象之前使用d$ 运算符,则会显示以下消息:Error in mutate_impl(.data, dots) : NAs are not allowed in subscripted assignments

简单地说:发生了什么,正在发生什么?

【问题讨论】:

  • 听起来您使用的是非常旧的 dplyr 版本。更新应该可以解决问题。

标签: r dplyr case-when


【解决方案1】:

因此,这不是您感兴趣的问题的直接答案,但您似乎正在尝试对 data.frame 中的列进行求和。如果我们可以假设 NA 值指的是权利分享投票,那么使用类似以下的方法来维护总和会更加灵活和简单:

df %>%
rowwise() %>%
mutate(vote_share = sum(gov1vote, gov2vote, gov3vote, na.rm = T))

这应该会生成与您当前代码相同的信息,并且它位于您要使用的 tidyverse 框架内。我赞同 Konrad 的评论,即您也将 tidyverse 更新到最新版本。我不相信rowwise() 直到最近才被添加。

【讨论】:

  • 非常感谢雅各布和康拉德。 tidyverse 的更新彻底解决了这个问题!
猜你喜欢
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 2018-06-13
相关资源
最近更新 更多