【问题标题】:Create a variable that can help me distinguish within group changes创建一个可以帮助我区分组更改的变量
【发布时间】:2021-11-03 04:32:57
【问题描述】:

我有以下数据。我想制作变量 1 和变量 2。请查看此 png,您将看到我拥有的数据以及我想要制作的数据

我想使用 R,这样我就可以创建想要的变量 1,它为每次变量“输入”出现并且不为空时创建一个组变量(如示例图片所示)。然后我想使用 Dplyr 来创建变量 2,它基本上是在组内进行差异。我想我可以通过以下方式做到这一点

df %>% group_by(Group, variable wanted 1) %>% mutate(variable2 = diff(df, lag=1))

但正如您所见,我在制作变量“Variable Wanted 1”时遇到了麻烦。我希望我能充分解释自己,如果没有,我很乐意编辑。感谢您的帮助!

df <- structure(list(Group = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 
3, 3), Output = c(2, 3, 4, 5, 3, 4, 6, 7, 9, 10, 1, 4, 6, 8), 
    Input = c(NA, "a", NA, "b", NA, "a", NA, "b", NA, "c", NA, 
    "a", NA, "b")), row.names = c(NA, -14L), class = c("tbl_df", 
"tbl", "data.frame"))

【问题讨论】:

  • 如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example。图片不是共享数据/代码的正确方式。
  • 请不要将代码/数据作为图像发布,它会破坏屏幕阅读器,我们无法使用它来尝试您的代码。请使用dput(x)(或dput(head(x)),如果它很大的话)发布数据。
  • 我用你的图片制作了数据框。如果您使用 dput 而不是图像共享数据,我们将不胜感激。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: r syntax data-analysis


【解决方案1】:

你可以试试

df %>%
  group_by(Group) %>%
  mutate(var_1 = rep(1:(n()/2), each = 2) ) %>%
  mutate(var_2 = ifelse(is.na(Input), "NA", Output - lag(Output, 1) ))

   Group Output Input var_1 var_2
   <dbl>  <dbl> <chr> <int> <chr>
 1     1      2 NA        1 NA   
 2     1      3 a         1 1    
 3     1      4 NA        2 NA   
 4     1      5 b         2 1    
 5     2      3 NA        1 NA   
 6     2      4 a         1 1    
 7     2      6 NA        2 NA   
 8     2      7 b         2 1    
 9     2      9 NA        3 NA   
10     2     10 c         3 1    
11     3      1 NA        1 NA   
12     3      4 a         1 3    
13     3      6 NA        2 NA   
14     3      8 b         2 2 

【讨论】:

    【解决方案2】:

    按照您使用fillgroup_by 对问题的解释,您可以这样做 -

    library(dplyr)
    library(tidyr)
    
    df %>%
      fill(Input, .direction = 'up') %>%
      mutate(result1 = match(Input, unique(Input))) %>%
      group_by(Group, result1) %>%
      mutate(result2 = lag(result1)) %>%
      ungroup
    
    #   Group Output Input result1 result2
    #   <dbl>  <dbl> <chr>   <int>   <int>
    # 1     1      2 a           1      NA
    # 2     1      3 a           1       1
    # 3     1      4 b           2      NA
    # 4     1      5 b           2       2
    # 5     2      3 a           1      NA
    # 6     2      4 a           1       1
    # 7     2      6 b           2      NA
    # 8     2      7 b           2       2
    # 9     2      9 c           3      NA
    #10     2     10 c           3       3
    #11     3      1 a           1      NA
    #12     3      4 a           1       1
    #13     3      6 b           2      NA
    #14     3      8 b           2       2 
    

    【讨论】:

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