R-如何将ifelse(str_detect ...)的输出应用于整个组

时间:2018-12-10 23:27:47

标签: r dplyr mutate

如果一个变量包含值“ PICU”或“ CCCU”(或两者),则我试图标记组中的所有实例。

    library(dplyr)

# construct sample tibble:
df <- tibble(
  key = rep(1:7, 3),
  Unit = rep(c('7A', '2B','CCCU', 'PICU'), length = 21))

我正在使用以下代码,该代码仅标记包含这些术语的行,而不标记该组中的其余术语。

icu <- qlik %>%
  select(key, Unit) %>%
  group_by(key) %>%
  mutate(ICU = ifelse(str_detect(Patient_Unit, 'PICU|CCCU') == 'TRUE', 1, 0))

2 个答案:

答案 0 :(得分:2)

我们可能会

df %>% select(key, Unit) %>%
  group_by(key) %>% mutate(ICU = 1 * any(c("PICU", "CCCU") %in% Unit))
# A tibble: 21 x 3
# Groups:   key [7]
#      key Unit    ICU
#    <int> <chr> <dbl>
#  1     1 7A        1
#  2     2 2B        1
#  3     3 CCCU      1
#  4     4 PICU      1
#  5     5 7A        1
#  6     6 2B        1
#  7     7 CCCU      1
#  8     1 PICU      1
#  9     2 7A        1
# 10     3 2B        1
# ... with 11 more rows

因此,如果ICU的{​​{1}}和any在相应组的PICU的值中,则CCCU的整个组将为1。

答案 1 :(得分:0)

这是您想要的结果吗?

reg [7:0] out_from_task1             ;
reg [7:0] out_from_task2             ;

task automatic test   ;                                     

input  [7:0] input_task       ;
output [7:0] output_task      ;
begin 
    output_task  = 'b0                                 ;
#4  output_task = input_task                          ;
#2  output_task = input_task +2                       ;
end 
endtask

initial begin
  fork
    test(8'd10,out_from_task1)  ;
    test(8'd8,out_from_task2)  ;
  join
end