忽略-Inf和NA查找R数据框列的最大值

use*_*581 6 r dataframe

我有一个R dataFrame,其中一些列具有-Inf和Na。我想找到忽略Inf和NA的特定列的最大值。我的dataFrame df如下:

column1     column2
  -Inf        2
   4          8
   Na         5
   7          4
   10         4 
Run Code Online (Sandbox Code Playgroud)

我尝试使用

temp=df
temp[is.infinite(temp)]<-NA
my_max=max(temp$column1, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

Error in is.infinite(temp) : default method not implemented for type 'list'
Run Code Online (Sandbox Code Playgroud)

我希望my_max等于10。如何解决此问题?

Ben*_*nes 8

该函数is.finite将识别(数值)向量中存在的元素

  • NA
  • NaN
  • Inf
  • -Inf

因此,此功能可以一步将您感兴趣的列进行子集化。

temp <- read.table(text = "
  column1     column2
  -Inf        2
   4          8
   NA         5
   7          4
   10         4",
   header = TRUE)

max(temp$column1[is.finite(temp$column1)])
# [1] 10
Run Code Online (Sandbox Code Playgroud)


dav*_*job 5

hablar 包中有一个简单的解决方案。通过在 max 之前添加 s() 可以避免这个问题。

data <- data.frame(column1 = c(-Inf, 4, NA, 7, 10), column2 = c(2, 8, 5, 4, 4))

max(s(data$column1))
Run Code Online (Sandbox Code Playgroud)

返回 10 并忽略向量的 Inf 和 NA。


JSP*_*JSP 1

一种解决方案如下:

data <- data.frame(column1 = c(-Inf, 4, NA, 7, 10), column2 = c(2, 8, 5, 4, 4))
column1b <- data$column1[which(!is.na(data$column1))]
column1c <- column1b[which(column1b < Inf)]
max(column1c)
Run Code Online (Sandbox Code Playgroud)