R:在分组列中改变非零最小值

R: Mutate non zero minimum in grouped column

我正在尝试使用 dplyr 计算组内列的非零最小值。我已经看到了一些类似的问题,但是,none 似乎有效。让我们看一个 iris 的例子。我想创建一个新列:min_length,每个物种的最小踏板长度都大于 1(我在这个例子中没有使用 0 来适应数据集)。我试过了:

iris <- iris %>% group_by(Species) %>% mutate(min_length = min(Petal.Length>1))

但我得到:

> iris$min_length
  [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
 [58] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[115] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

此外,我尝试了 Find minimum non-zero value in a column R 中建议的答案:

iris$min_length <- iris %>% group_by(Species) %>% min(iris[iris$Sepal.Length>1, "Sepal.Length"]) 

但我得到:

Error in FUN(X[[i]], ...) : only defined on a data frame with all numeric variables

预期输出为:

iris$min_length
  [1] 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1
 [29] 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 3.0 3.0 3.0 3.0 3.0 3.0
 [57] 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0
 [85] 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5
[113] 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5
[141] 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5

有什么想法吗?

你快明白了

library(tidyverse)

iris %>% group_by(Species) %>% mutate(min_length = min(Petal.Length[Petal.Length > 1]))