Удалите строки из кадра данных, имеющие бесконечное значение в одном столбце, но не в других - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть фрейм данных с несколькими столбцами, которые содержат значения как 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   

Все решения, которые я нашел чтобы удалить бесконечные значения из фреймов данных, удалите все бесконечные значения, а не только те, которые основаны на одном столбце в наборе данных. Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 20 апреля 2020

Ваши переменные являются факторами, поэтому вы должны сначала преобразовать их в числовой c формат. Затем у вас есть несколько способов удалить значения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...