在管道内的case_when中找不到对象

时间:2017-10-07 17:15:29

标签: r dplyr case-when

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

    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

简单地说:发生了什么以及发生了什么?

1 个答案:

答案 0 :(得分:0)

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

rowwise()

这应该生成与当前代码相同的信息,并且它在您要使用的tidyverse框架内。我回应康拉德的评论,你也将tidyverse更新到最新版本。我不相信{{1}}直到最近才被添加。