【问题标题】:Remove rows from dataframe that have an infinite value in one column, but not others从数据框中删除一列中具有无限值的行,但其他列中没有
【发布时间】:2020-04-20 17:58:20
【问题描述】:

我有一个包含多个列的数据框,其中包含 Inf 和 -Inf 值。我想从数据集中删除其中一列中包含 Inf/-Inf 值的所有行,但我想将 Inf/-Inf 保留在其他列中。

所以,如果我从以下数据框开始:

 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   

我发现的所有从数据框中删除无限值的解决方案都会删除所有无限值,而不仅仅是那些基于数据集中一列的值。感谢您的帮助!

【问题讨论】:

    标签: r conditional-statements infinity


    【解决方案1】:

    您的变量是因子,因此您应该先将它们转换为数字格式。然后,您有几种方法可以删除 Inf 值。最简单的方法是使用is.finite 选择行。

    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
    

    你也可以使用可变位置

    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
    

    【讨论】:

    • 另一个 Base-R 替代方案 data[data[,2]!=Inf&amp;data[,2]!=-Inf,]
    • @user2096647 很高兴我能帮上忙!你介意接受答案吗?
    猜你喜欢
    • 2014-02-27
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2015-04-12
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多