[英]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.