R 分组求多变量的最小值

R 分组求多变量的最小值,r,plyr,R,Plyr,我想找出一个变量(时间)的最小值,其他几个变量等于1(或任何其他值)。基本上,我的应用程序是找到x==1的第一年,对于几个x。我知道如何为一个x找到这个,但希望避免生成多个最小值的简化数据帧,然后将它们合并在一起。有没有一种有效的方法可以做到这一点?下面是我的一个变量的示例数据和解决方案 d <- data.frame(cat = c(rep("A",10), rep("B",10)), time = c(1:10), var

我想找出一个变量(时间)的最小值,其他几个变量等于1(或任何其他值)。基本上,我的应用程序是找到x==1的第一年,对于几个x。我知道如何为一个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))

这是你所期待的吗

library(dplyr)
df <- d %>% 
group_by(cat, var1, var2) %>% 
summarise(start = min(time)) %>% 
filter()
库(dplyr)
df%
分组依据(类别、变量1、变量2)%>%
总结(开始=分钟(时间))%>%
过滤器()

我留下了一个空白的
filter
参数,您可以用它来指定您想要的任何筛选条件(比如
var1==1
cat==a“

这是您所期望的吗

library(dplyr)
df <- d %>% 
group_by(cat, var1, var2) %>% 
summarise(start = min(time)) %>% 
filter()
库(dplyr)
df%
分组依据(类别、变量1、变量2)%>%
总结(开始=分钟(时间))%>%
过滤器()

我留下了一个空白的
filter
参数,您可以使用它来指定您想要的任何筛选条件(比如
var1==1
cat==a“

使用
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
#一个tible:2x3
#cat var1 var2
#     
#1 A 4 5
#2 B 7 8

使用
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
#一个tible:2x3
#cat var1 var2
#     
#1 A 4 5
#2 B 7 8

我们可以使用
base R
获得按“cat”分组的所有“var”列中的最小“time”

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

我们可以使用
base R
获得按“cat”分组的所有“var”列中的最小“time”

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

你能提供预期输出吗?你能提供预期输出吗?