对于每个受试者,如果Cmax或AUC为零,则FLAG应为0.如果两者均为1,则FLAG = 1.
SUB METRIC BE FLAG
1 Cmax 0 NA
1 AUC 1 NA
2 Cmax 1 NA
2 AUC 1 NA
3 Cmax 1 NA
3 AUC 1 NA
4 Cmax 1 NA
4 AUC 0 NA
输出应该是这样的:
SUB METRIC BE FLAG
1 Cmax 0 0
1 AUC 1 0
2 Cmax 1 1
2 AUC 1 1
3 Cmax 1 1
3 AUC 1 1
4 Cmax 1 0
4 AUC 0 0
然后我想取FLAG的总和,但对于唯一主题,FLAG = 1应加一次,因为它是同一主题。所以,上面的FLAG总和应该等于2而不是4.我正在使用RStudio。
答案 0 :(得分:3)
我们可以在按照' SUB'
进行分组后使用逻辑条件library(dplyr)
df1 %>%
group_by(SUB) %>%
mutate(FLAG = as.integer(all(BE[METRIC %in% c("Cmax", "AUC")]==1)))
# A tibble: 8 x 4
# Groups: SUB [4]
# SUB METRIC BE FLAG
# <int> <chr> <int> <int>
#1 1 Cmax 0 0
#2 1 AUC 1 0
#3 2 Cmax 1 1
#4 2 AUC 1 1
#5 3 Cmax 1 1
#6 3 AUC 1 1
#7 4 Cmax 1 0
#8 4 AUC 0 0
答案 1 :(得分:2)
我认为akruns的答案更优雅,但这是我使用dplyrs case_when()
的方法:
dat %>%
group_by(SUB) %>%
mutate(
FLAG = case_when(
sum(BE) < length(BE) ~ 0,
sum(BE) == length(BE) ~ 1
))
# A tibble: 8 x 4
# Groups: SUB [4]
# SUB METRIC BE FLAG
# <dbl> <chr> <dbl> <dbl>
#1 1 Cmax 0 0
#2 1 AUC 1 0
#3 2 Cmax 1 1
#4 2 AUC 1 1
#5 3 Cmax 1 1
#6 3 AUC 1 1
#7 4 Cmax 1 0
#8 4 AUC 0 0
然后,您可以使用summarise()
函数取最大值FLAG
,并将SUB_FLAG
求和。 SUB_FLAG
之和为2。
dat %>%
group_by(SUB) %>%
mutate(
FLAG = case_when(
sum(BE) < length(BE) ~ 0,
sum(BE) == length(BE) ~ 1
)
) %>%
summarise(SUB_FLAG = max(FLAG)) %>%
summarise_at("SUB_FLAG", sum)
# A tibble: 1 x 1
# SUB_FLAG
# <dbl>
#1 2