在R中,当按另一个变量分组时,如何标记列中重复值运行的第一个示例?

czfnxgou  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(134)

以下面的数据框为例:

Group<-c("AGroup", "AGroup", "AGroup", "AGroup", "BGroup", "BGroup", "BGroup", "BGroup", "CGroup", "CGroup", "CGroup", "CGroup")
Status<-c("Low", "Low", "High", "High", "High", "Low", "High", "Low", "Low", "Low", "High", "High")

df<-data.frame(Group, Status)

df$FirstHighRun<-c(0,0,1,1,1,0,0,0,0,0,1,1)

这将创建以下内容,其中“FirstHighRun”是我尝试创建的列:

Group   Status  FirstHighRun
AGroup  Low     0 
AGroup  Low     0
AGroup  High    1
AGroup  High    1
BGroup  High    1
BGroup  Low     0
BGroup  High    0
BGroup  Low     0
CGroup  Low     0
CGroup  Low     0
CGroup  High    1
CGroup  High    1

正如人们可以看到,我试图标签的第一次“高”,并直接重复出现这个条目,出现在每个组的状态列.
在“BGroup”中,有两个“High”条目。但是,由于第二个示例没有直接跟随第一个示例,因此它没有被标记为1。

tzdcorbm

tzdcorbm1#

尝试使用rle

library(dplyr)
df %>% 
  group_by(Group) %>%
  mutate(FirstHighRun2 = +(inverse.rle(within.list(rle(Status ==
       "High"), { values[which(values)[-1]] <- FALSE})))) %>%
  ungroup
  • 输出
# A tibble: 12 × 4
   Group  Status FirstHighRun FirstHighRun2
   <chr>  <chr>         <dbl>         <int>
 1 AGroup Low               0             0
 2 AGroup Low               0             0
 3 AGroup High              1             1
 4 AGroup High              1             1
 5 BGroup High              1             1
 6 BGroup Low               0             0
 7 BGroup High              0             0
 8 BGroup Low               0             0
 9 CGroup Low               0             0
10 CGroup Low               0             0
11 CGroup High              1             1
12 CGroup High              1             1

相关问题