簡體   English   中英

從 dataframe 中刪除一列中具有無限值但其他列沒有的行

[英]Remove rows from dataframe that have an infinite value in one column, but not others

我有一個 dataframe 有多個包含 Inf 和 -Inf 值的列。 我想從數據集中刪除其中一列中包含 Inf/-Inf 值的所有行,但我想將 Inf/-Inf 保留在其他列中。

所以,如果我從以下 dataframe 開始:

 Group<-c("A","B","C","D","E","F","G")
 LRR <- c(Inf, 1,2,3,-Inf,4, 5)
 LRR.var <- c(Inf, Inf, 3, -Inf, -Inf, 6,7)
 data<-data.frame(cbind(Group, LRR, LRR.var))
 data

 Group  LRR  LRR.var
 A      Inf  Inf
 B      1    Inf
 C      2    3
 D      3   -Inf
 E     -Inf -Inf
 F      4    6
 G      5    7

我希望它最終看起來像這樣:

Group<-c("B","C","D","F","G")
LRR <- c(1,2,3,4, 5)
LRR.var <- c( Inf, 3,-Inf, 6,7)
data1<-data.frame(cbind(Group, LRR, LRR.var))
data1

Group  LRR  LRR.var
 B      1    Inf
 C      2    3
 D      3   -Inf
 F      4    6
 G      5    7   

我發現從數據框中刪除無限值的所有解決方案都刪除了所有無限值,而不僅僅是基於數據集中一列的那些。 謝謝你的幫助!

您的變量是因素,因此您應該首先將它們轉換為數字格式。 然后,您有幾種方法可以刪除Inf值。 最簡單的方法是使用is.finite到 select 行。

data <- data.frame(
    Group = c("A","B","C","D","E","F","G"),
    LRR = c(Inf, 1,2,3,-Inf,4, 5),
    LRR.var = c(Inf, Inf, 3, -Inf, -Inf, 6,7), 
    stringsAsFactors = FALSE
)

底座R

data[is.finite(data$LRR),]

  Group LRR LRR.var
2     B   1     Inf
3     C   2       3
4     D   3    -Inf
6     F   4       6
7     G   5       7

您也可以使用變量 position

data[is.finite(data[,2]),]

data.table

使用data.table ,您不需要第二個維度:

library(data.table)
as.data.table(data)[is.finite(LRR)]

Group LRR LRR.var
1:     B   1     Inf
2:     C   2       3
3:     D   3    -Inf
4:     F   4       6
5:     G   5       7

dplyr

使用dplyr ,您可以使用filter

library(dplyr)
data %>% filter(is.finite(LRR))

  Group LRR LRR.var
1     B   1     Inf
2     C   2       3
3     D   3    -Inf
4     F   4       6
5     G   5       7

暫無
暫無

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

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