dataframe中的最小值大于R中的0

minimum value in dataframe greater than 0 in R

我在 R 中有一个包含约 2500 列的数据集,我试图从整个数据框中找到大于零的最小值。找到这个数字后,我想尝试将它添加到数据框中的所有其他数据。

这是一个示例数据集。

df <- as.data.frame(rbind(c(0.01,0.4,0.5,5,27,0.22,25,0,0,0.3),c(0.25,0,0,2.3,3.6,6,0,0.001,0.021,0),c(22,23,0,40,0.53,0.2,0.4,0.44,0,0),c(0.1,0,0.12,0.56,0.7,13,0,0,3,4)))

如您所见,此数据框中的最小值为 0.001

我试过以下方法:

min<- min(df=!0)

这给了我 1。

然后我想将这个数字 (0.001) 添加到数据框中的所有其他值。但是,我不知道该怎么做。

感谢您花时间考虑我的问题。任何帮助将不胜感激。

您的 df=!0 语法不正确。如果要指定df不等于0,正确的做法是df!=0。但是,如果您这样做,输出将是合乎逻辑的,因此 min(df != 0) 的结果将是 0.

因此,您应该使用逻辑输出来索引您的原始 df

min(df[df != 0])
[1] 0.001

由于您的问题表明您希望 min 值大于零,因此使用 df > 0 更准确。

min(df[df > 0])
[1] 0.001

另一种方法是取消列出数据框,然后找到其非零元素的最小值:

nonzero <- which(df != 0)
min(unlist(df)[nonzero])
[1] 0.001

这是另一个使用 tidyversemin 的选项。我们可以使用 map 将任何零值转换为 NA,然后将数据转换为向量,然后拉取最小值,不包括 NA.

library(tidyverse)

map(df, na_if, 0) %>%
  flatten_dbl() %>%
  min(na.rm = T)

# [1] 0.001