2016-03-13 180 views
2

我有一個R dataFrame,其中某些列有-Inf和Na。我想找到忽略Inf和NA的特定列的最大值。我的數據幀DF情況如下:查找R dataframe列的最大值忽略-Inf和NA

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

我嘗試使用

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

,但我得到了以下錯誤:

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

我想的my_max等於10.如何我可以解決這個問題嗎?

+1

'溫度[is.infinite(TEMP)] < - NA'是你的問題 - '是。無限「只能用於矢量,不能用於整個數據幀。你的邏輯沒問題,但是''max(替換(data $ column1,is.infinite(data $ column1),NA),na.rm = TRUE)'將會起作用。 – thelatemail

回答

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) 
+0

謝謝,但爲什麼column1b <= 10;因爲我知道大數據集的最大值是多少。 – user3841581

+0

對不起,這是一個錯字,我將它固定到Inf。 – JSP

+0

謝謝Joachim,你的例子工作正常,但是當我在我的數據集上嘗試該方法時,我得到-Inf as my_max。我不知道它現在的工作 – user3841581

1

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 
0

從包含空白字段.csv文件讀取時我使用的一種方法:

df[df==""] <- NA 
df <- na.omit(df) 
print(max(df[,1]))