创建一个可以帮助我区分组内变化的变量

Create a variable that can help me distinguish within group changes

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

我想使用 R,这样我就可以将 Variable wanted 设为 1,这会在每次出现变量“input”且不为空时创建一个组变量(如示例图片所示)。然后我想使用 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"))

你可以试试

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 

根据您使用 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