1

我有一个简单的问题。我正在尝试创建一个列,它在 TRUE 值之前重复该值grepl。因此,在这样的 data.frame 中: df <- data.frame(name = c("E11","M05","M05","E12","M05","E13","E14"))

我试图使用这样的东西没有成功: df %>% mutate( clone = ifelse(grepl("M05",name), lag(name), ""))

这是我期望的输出:

| name | clone |
+------+-------+
| E11  |       |
| M05  | E11   |
| M05  | E11   |
| E12  |       |
| M05  | E12   |
| E13  |       |
| E14  |       |
+------+-------+


4

1 回答 1

1

cumsum我们可以使用和grepl填充clone值创建组。

library(dplyr)

df %>% 
  group_by(grp = cumsum(!grepl("M05",name))) %>%
  mutate(clone = ifelse(row_number() > 1, first(name), '')) %>%
  ungroup() %>%
  select(-grp)

# A tibble: 7 x 2
#  name  clone
#  <chr> <chr>
#1 E11   ""   
#2 M05   "E11"
#3 M05   "E11"
#4 E12   ""   
#5 M05   "E12"
#6 E13   ""   
#7 E14   ""   
于 2020-05-13T09:57:14.697 回答