微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用两列按组对行进行排序

如何解决使用两列按组对行进行排序

假设我有以下df

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

如何从前两列中获取 Result

我尝试了使用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
,

我们可以将rle中的avebase R一起使用

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。