簡體   English   中英

如何從 R 中的 dataframe 中刪除帶有 inf 的行?

[英]How can I remove rows with inf from my dataframe in R?

我有一個非常大的數據框(ICS_data),大約有 129 列(變量)和 5276 行。 一些行在單個或多個變量中包含 inf 值。 我已經使用 na.omit(df) 刪除了帶有 NA 和 NaN 的行,但它仍然給我錯誤。 當我在 SO 中搜索類似錯誤時,我得到了此代碼ICS_data[is.finite(rowSums(ICS_data)),]作為可能的解決方案,但是當我在 dataframe 上運行它時,我仍然收到另一條錯誤消息> powerdata <- ICS_data[is.finite(rowSums(ICS_data)),] Error in rowSums(ICS_data): 'x' must be numeric 我檢查了我的數據集,它們都是數字,除了我的參考變量是一個因素。 有人可以幫幫我嗎?

    > sapply(ICS_data, class)
     R1.PA1.VH           R1.PM1.V          R1.PA2.VH           R1.PM2.V 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R1.PA3.VH           R1.PM3.V          R1.PA4.IH           R1.PM4.I 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R1.PA5.IH           R1.PM5.I          R1.PA6.IH           R1.PM6.I 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R1.PA7.VH           R1.PM7.V          R1.PA8.VH           R1.PM8.V 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R1.PA9.VH           R1.PM9.V         R1.PA10.IH          R1.PM10.I 
     "numeric"          "numeric"          "numeric"          "numeric" 
    R1.PA11.IH          R1.PM11.I         R1.PA12.IH          R1.PM12.I 
     "numeric"          "numeric"          "numeric"          "numeric" 
          R1.F              R1.DF            R1.PA.Z           R1.PA.ZH 
     "numeric"          "numeric"          "numeric"          "numeric" 
          R1.S          R2.PA1.VH           R2.PM1.V          R2.PA2.VH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R2.PM2.V          R2.PA3.VH           R2.PM3.V          R2.PA4.IH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R2.PM4.I          R2.PA5.IH           R2.PM5.I          R2.PA6.IH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R2.PM6.I          R2.PA7.VH           R2.PM7.V          R2.PA8.VH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R2.PM8.V          R2.PA9.VH           R2.PM9.V         R2.PA10.IH 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R2.PM10.I         R2.PA11.IH          R2.PM11.I         R2.PA12.IH 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R2.PM12.I               R2.F              R2.DF            R2.PA.Z 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R2.PA.ZH               R2.S          R3.PA1.VH           R3.PM1.V 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R3.PA2.VH           R3.PM2.V          R3.PA3.VH           R3.PM3.V 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R3.PA4.IH           R3.PM4.I          R3.PA5.IH           R3.PM5.I 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R3.PA6.IH           R3.PM6.I          R3.PA7.VH           R3.PM7.V 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R3.PA8.VH           R3.PM8.V          R3.PA9.VH           R3.PM9.V 
     "numeric"          "numeric"          "numeric"          "numeric" 
    R3.PA10.IH          R3.PM10.I         R3.PA11.IH          R3.PM11.I 
     "numeric"          "numeric"          "numeric"          "numeric" 
    R3.PA12.IH          R3.PM12.I               R3.F              R3.DF 
     "numeric"          "numeric"          "numeric"          "numeric" 
       R3.PA.Z           R3.PA.ZH               R3.S          R4.PA1.VH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R4.PM1.V          R4.PA2.VH           R4.PM2.V          R4.PA3.VH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R4.PM3.V          R4.PA4.IH           R4.PM4.I          R4.PA5.IH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R4.PM5.I          R4.PA6.IH           R4.PM6.I          R4.PA7.VH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R4.PM7.V          R4.PA8.VH           R4.PM8.V          R4.PA9.VH 
     "numeric"          "numeric"          "numeric"          "numeric" 
      R4.PM9.V         R4.PA10.IH          R4.PM10.I         R4.PA11.IH 
     "numeric"          "numeric"          "numeric"          "numeric" 
     R4.PM11.I         R4.PA12.IH          R4.PM12.I               R4.F 
     "numeric"          "numeric"          "numeric"          "numeric" 
         R4.DF            R4.PA.Z           R4.PA.ZH               R4.S 
     "numeric"          "numeric"          "numeric"          "numeric" 
    control_panel_log1 control_panel_log2 control_panel_log3 control_panel_log4 
     "numeric"          "numeric"          "numeric"          "numeric" 
    relay1_log         relay2_log         relay3_log         relay4_log 
     "numeric"          "numeric"          "numeric"          "numeric" 
    snort_log1         snort_log2         snort_log3         snort_log4 
     "numeric"          "numeric"          "numeric"          "numeric" 
        marker 
      "factor"

要刪除具有Inf值的行,您可以使用:

ICS_data[rowSums(sapply(ICS_data[-ncol(ICS_data)], is.infinite)) == 0, ]

或使用dplyr

library(dplyr)
ICS_data %>% filter_at(-ncol(.), all_vars(is.finite(.)))

我們可以將代碼分解成更小的步驟來理解它是如何工作的。

考慮這些數據。

data <- data.frame(a = 1:4, b = 2:5, c = letters[1:4], stringsAsFactors = TRUE)
data$b[2] <- Inf
data
#  a   b c
#1 1   2 a
#2 2 Inf b
#3 3   4 c
#4 4   5 d

首先,我們從data中刪除最后一列。 我們刪除它,因為最后一列是factor ,因為我們不想包含它來查找無限值。 所以我們只得到數字列。

data[-ncol(data)]

#  a   b
#1 1   2
#2 2 Inf
#3 3   4
#4 4   5

接下來使用sapply我們使用is.infinite在每一列中找出哪些值是無限的。 這將返回一個具有TRUE / FALSE值的矩陣。

sapply(data[-ncol(data)], is.infinite)

#         a     b
#[1,] FALSE FALSE
#[2,] FALSE  TRUE
#[3,] FALSE FALSE
#[4,] FALSE FALSE

我們可以使用rowSums對這些邏輯值求和。 這里TRUE被認為是 1, FALSE被認為是 0。

rowSums(sapply(data[-ncol(data)], is.infinite))
#[1] 0 1 0 0

使用這個我們知道第二行有 1 個無限值,我們需要刪除它。 所以我們 select 行有 0 個無限值。

data[rowSums(sapply(data[-ncol(data)], is.infinite)) == 0, ]

#  a b c
#1 1 2 a
#3 3 4 c
#4 4 5 d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM