我想找到其他几个变量等于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))
答案 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 == 1
或cat == "A"
)