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