【问题标题】:Create variable measuring change over time创建随时间变化的测量变化
【发布时间】:2021-02-24 17:31:35
【问题描述】:

我有三个变量,第一个衡量选举前一年的预期投票选择,第二个和第三个衡量有效投票选择(并非所有人都没有同时被问到,因此有两个变量衡量有效的投票选择)。我想知道选择是保持不变还是改变了。如何一次性完成所有观察?

id  V1  V2  V3
1   50  NA  50  
2   20  NA  50
3   30  NA  20
4   30  NA  30
5   20  20  NA
6   40  NA  NA
7   50  NA  10
8   10  NA  10
9   40  NA  50
10  50  NA  NA

所以我想知道V1和V2/V3之间是否有区别。我想先合并 V2 和 V3,但我完全不确定。最后应该是这样的(1表示有变化,0表示没有变化):

id  change
1   0
2   0
3   1
4   0
5   0
6   NA
7   1
8   0
9   1
10  NA

【问题讨论】:

    标签: r time merge


    【解决方案1】:

    dplyr的解决方案

    dt <- data.frame(V1=c(50,20,30,30,20,40,50,10,10,50),
                     V2=c(NA,NA,NA,NA,20,NA,NA,NA,NA,NA),
                     V3=c(50,50,20,30,NA,NA,10,10,50,NA))
    dt %>%    
      mutate(V4= coalesce(V2, V3))  %>% 
      mutate(change = case_when(V1 == V4 ~0,
                                V1 != V4 ~1)) %>% 
      select(change)
    

    结果

       change
    1       0
    2       1
    3       1
    4       0
    5       0
    6      NA
    7       1
    8       0
    9       1
    10     NA
    

    【讨论】:

      【解决方案2】:

      我会按照您建议的方式处理此问题:首先使用一些合适的逻辑组合 V2V3 变量(也许您需要考虑同时存在 V2 和 V3 的情况),然后简单地比较V1 重视这一新的衡量他们有效投票的单一衡量标准。

      dplyr

      d <- tribble(~id,  ~V1,  ~V2,  ~V3,
      1,   50,  NA,  50,  
      2,   20,  NA,  50,
      3,   30,  NA,  20,
      4,   30,  NA,  30,
      5,   20,  20,  NA,
      6,   40,  NA,  NA,
      7,   50,  NA,  10,
      8,   10,  NA,  10,
      9,   40,  NA,  50,
      10,  50,  NA,  NA,
      )
      
      d %>%
        mutate(effective_vote = if_else(is.na(V2), V3, V2),
               change = if_else(!V1==effective_vote, 1, 0))
      

      给予

      # A tibble: 10 x 6
            id    V1    V2    V3 effective_vote change
         <dbl> <dbl> <dbl> <dbl>          <dbl>  <dbl>
       1     1    50    NA    50             50      0
       2     2    20    NA    50             50      1
       3     3    30    NA    20             20      1
       4     4    30    NA    30             30      0
       5     5    20    20    NA             20      0
       6     6    40    NA    NA             NA     NA
       7     7    50    NA    10             10      1
       8     8    10    NA    10             10      0
       9     9    40    NA    50             50      1
      10    10    50    NA    NA             NA     NA
      

      effective_vote = if_else(is.na(V2), V3, V2) 说,实际上,使用 V2 作为有效投票,如果我们有 V2——否则使用 V3。这将处理V2V3 都缺失的边缘情况,以及V2V3 都存在的情况(我选择在“两者都存在”的情况下使用V2,因为大概V2 是在接近选举的时候收集,所以它可能比 V3 更能代表他们的“真实”投票,V3 是稍后收集的——但你可以做出不同的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        相关资源
        最近更新 更多