数据帧中r中大于0的最小值



我有一个数据集,在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不等于零,正确的方法是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

最新更新