在dplyr中,如何对数据帧中的行进行采样,并将条件(sum和min)应用于一个或多个列?
我有如下数据:在dplyr中,如何对数据帧中的行进行采样,并将条件(sum和min)应用于一个或多个列?,r,dplyr,R,Dplyr,我有如下数据: Object Rank Cost OBJ1 1 3 OBJ2 2 3 OBJ3 3 2.5 OBJ4 4 1.5 OBJ5 5 0 OBJ6 6 1 OBJ7 7 0 OBJ8 8 0 OBJ9 9 1 OBJ10 10 0 OBJ11 11 2 OBJ12 12 1 O
Object Rank Cost
OBJ1 1 3
OBJ2 2 3
OBJ3 3 2.5
OBJ4 4 1.5
OBJ5 5 0
OBJ6 6 1
OBJ7 7 0
OBJ8 8 0
OBJ9 9 1
OBJ10 10 0
OBJ11 11 2
OBJ12 12 1
OBJ13 13 2.5
OBJ14 14 1
OBJ15 15 1
OBJ16 16 3
OBJ17 17 0
OBJ18 18 0
OBJ19 19 0
我希望使用dplyr随机选择5行,这样这5行的cost列的和正好等于5,而抽样的5行的秩和具有最低的可能值。这是一个简化的示例,但我的实际数据有更多的行。有没有办法不用写循环就能做到这一点
以下是数据:
x <- structure(list(Object = structure(c(1L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L),
.Label = c("OBJ1", "OBJ10", "OBJ11", "OBJ12", "OBJ13", "OBJ14", "OBJ15", "OBJ16", "OBJ17", "OBJ18", "OBJ19", "OBJ2", "OBJ3", "OBJ4", "OBJ5", "OBJ6", "OBJ7", "OBJ8", "OBJ9"), class = "factor"),
Rank1 = 1:19, Cost = c(3, 3, 2.5, 1.5, 0, 1, 0, 0, 1, 0, 2, 1, 2.5, 1, 1, 3, 0, 0, 0)),
.Names = c("Object", "Rank1", "Cost"), class = "data.frame", row.names = c(NA, -19L))
x听起来像是对一个NP完全问题(非常困难)的重述。Filter(函数(l){l[[2]==5},combn(nrow(x),5,FUN=函数(i){list(i,sum(x$Cost[i]),simplify=FALSE)[[1][[1]][[1]],但它不能很好地扩展。稍微简单一点:Filter(函数(i){sum(x$Cost[i])=5},combn(nrow(x),5,simplify=FALSE))[[1]]