我有一个数据集,在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
这是使用tidyverse
和min
的另一个选项。我们可以使用map
将任何零值转换为NA
,然后将数据转换为矢量,然后提取最小值,不包括NA
。
library(tidyverse)
map(df, na_if, 0) %>%
flatten_dbl() %>%
min(na.rm = T)
# [1] 0.001