Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding the max of a R dataframe column ignoring -Inf and NA

Tags:

dataframe

r

I have a R dataFrame from which some columns have -Inf and Na. I would like to find the max of a specific column ignoring the Inf and NA. My dataFrame df is as follow:

column1     column2
  -Inf        2
   4          8
   Na         5
   7          4
   10         4 

I tried using

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

but I get the following error:

Error in is.infinite(temp) : default method not implemented for type 'list'

I would like to my_max to be equal to 10. How can I tackle this problem?

like image 292
user3841581 Avatar asked Mar 13 '16 19:03

user3841581


2 Answers

The function is.finite will identify elements in a (numeric) vector that are not in

  • NA
  • NaN
  • Inf
  • -Inf

Thus, this function can subset your column of interest in one step.

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
like image 154
BenBarnes Avatar answered Oct 10 '22 20:10

BenBarnes


There is a simple solution in the hablar package. BY adding s() before max you avoid this problem.

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

max(s(data$column1))

Return 10 and have ignores the Inf and NA of the vector.

like image 4
davsjob Avatar answered Oct 10 '22 19:10

davsjob