我有以下df
df <- data.frame(group=c("a","a","a","b","b","b","b","b","c","c","c","c"),
length=c(1.2,1.4,1.1,1.0,2.1,1.4,1.3,1.3,1.1,1.0,1.8,1.4),
weight = c(.3,.2,.3,.5,.7,.4,.3,.4,.7,.8,.4,.1))
我希望能够根据最小&#34;权重&#34;生成相同长度的逻辑向量。每个&#34;组&#34;的价值。对于上面的例子,结果应该是
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
如果可能问题很简单,我道歉,但我无法解决这个问题。
答案 0 :(得分:1)
尝试ave
(有关详细信息,请参阅?ave
):
d <- ave(df$weight, df$group, FUN=function(x){min(x) == x})
d
# [1] 0 1 0 0 0 0 1 0 0 0 0 1
as.logical(d)
# [1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
答案 1 :(得分:1)
您可以编写一个简短的is.min
函数(如果您涉及到这类内容),然后将by
与is.min
一起使用。
这有点类似于@sgibb给出的答案。实际上,自is.min
编辑以来,它几乎完全相同。但我会留在这里,以防您从未见过unlist
,with
和/或by
。
> is.min <- function(x){ x == min(x) }
> unlist(with(df, by(weight, group, is.min)))
## a1 a2 a3 b1 b2 b3 b4 b5 c1 c2 c3 c4
## FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE