在管道内 case_when 中找不到对象

Object Not Found in case_when within pipe

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

    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.

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

所以这不是对您感兴趣的问题的直接回答,但您似乎正试图对 data.frame 中的各列求和。如果我们可以假设 NA 值指的是右股投票,那么维护求和使用类似的东西会更加灵活和简单:

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

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