如何使用" any()"在分组数据框架中?

时间:2017-07-31 14:20:57

标签: r dplyr

我有一个数据库,可以在不同的时间对某个对象进行多次观察,在这种情况下可以发生或不发生事件。

我想知道每个对象是否有事件。

以下是一个例子:

x=c(1,1,1,2,2,2,3,3,3)
y=c(1,2,3,1,2,3,1,2,3)
z=c(NA,NA,NA,F,NA,NA,F,F,T)
df=data.frame(object=x, time=y, event=z)

预期输出为Object 1 = NAObject 2 = FALSEObject 3 = TRUE

以下是我的尝试:

df %>% group_by(object) %>% summarise(any(event==T, na.rm=F)) 
#Object 2 = NA

df %>% group_by(object) %>% summarise(any(event==T, na.rm=T))
#Object 1 = FALSE

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

我们可以尝试

df %>%
   group_by(object) %>% 
   summarise(Col = as.logical(any(event, na.rm = TRUE)* NA^(all(is.na(event)))) )
# A tibble: 3 x 2
#  object   Col
#   <dbl> <lgl>
#1      1    NA
#2      2 FALSE
#3      3  TRUE

答案 1 :(得分:1)

sapply(split(df$event, df$object), function(x)
    ifelse(all(is.na(x)), NA, as.logical(max(x, na.rm = TRUE))))
#    1     2     3 
#   NA FALSE  TRUE