按组查找多个变量的最小值

时间:2018-09-04 14:01:20

标签: r plyr

我想找到其他几个变量等于1(或任何其他值)的变量(时间)的最小值。基本上,我的应用程序找到了x == 1的第一年。我知道如何找到一个x,但是要避免生成多个减少的最小值数据帧,然后将它们合并在一起。有一种有效的方法可以做到这一点吗?这是我的示例数据和一个变量的解决方案。

d <- data.frame(cat = c(rep("A",10), rep("B",10)),
                time = c(1:10),
                var1 = c(0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1),
                var2 = c(0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1))

ddply(d[d$var1==1,], .(cat), summarise,
      start= min(time))

3 个答案:

答案 0 :(得分:2)

如何使用dplyr

d %>% 
   group_by(cat) %>% 
   summarise_at(vars(contains("var")), funs(time[which(. == 1)[1]]))

哪个给

# A tibble: 2 x 3
#   cat    var1  var2
#   <fct> <int> <int>
# 1 A         4     5
# 2 B         7     8

答案 1 :(得分:2)

我们可以使用base R来获取按“猫”分组的所有“ var”列中的最短“时间”

sapply(split(d[-1], d$cat), function(x)
            x$time[min(which(x[-1] ==1, arr.ind = TRUE)[, 1])])
#A B 
#4 7 

答案 2 :(得分:1)

这是您所期望的吗?

library(dplyr)
df <- d %>% 
group_by(cat, var1, var2) %>% 
summarise(start = min(time)) %>% 
filter()

我留下了一个空白的filter参数,您可以使用它来指定所需的任何过滤条件(例如var1 == 1cat == "A"