r-行使用两列按组排列



假设我有以下df

data <- data.frame(ID = c(1,1,1,1,1,1,1,2,2,2,2,3,3,3),
Value = c(1,1,0,1,0,1,1,1,0,0,1,0,0,0),
Result = c(1,1,2,3,4,5,5,1,2,2,3,1,1,1))

如何从前两列中获取列结果

我尝试过使用rle、seq、cumsum和cur_group_id的不同方法,但无法轻松获得Result

library(data.table)
library(dplyr)
data %>% 
group_by(ID) %>% 
mutate(Result2 = rleid(Value))

这给了我们:

ID Value Result Result2
<dbl> <dbl>  <dbl>   <int>
1     1     1      1       1
2     1     1      1       1
3     1     0      2       2
4     1     1      3       3
5     1     0      4       4
6     1     1      5       5
7     1     1      5       5
8     2     1      1       1
9     2     0      2       2
10     2     0      2       2
11     2     1      3       3
12     3     0      1       1
13     3     0      1       1
14     3     0      1       1

这行吗:

library(dplyr)
data %>% group_by(ID) %>% mutate(r = rep(seq_along(rle(ID*Value)$values), rle(ID*Value)$lengths))
# A tibble: 14 x 4
# Groups:   ID [3]
ID Value Result     r
<dbl> <dbl>  <dbl> <int>
1     1     1      1     1
2     1     1      1     1
3     1     0      2     2
4     1     1      3     3
5     1     0      4     4
6     1     1      5     5
7     1     1      5     5
8     2     1      1     1
9     2     0      2     2
10     2     0      2     2
11     2     1      3     3
12     3     0      1     1
13     3     0      1     1
14     3     0      1     1

我们可以在base R中使用rleave

data$Result2 <- with(data, ave(Value, ID, FUN = 
function(x) inverse.rle(within.list(rle(x), values <- seq_along(values)))))
data$Result2
#[1] 1 1 2 3 4 5 5 1 2 2 3 1 1 1

相关内容

  • 没有找到相关文章

最新更新