繁体   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