Как удалить строки, в которых есть ноль или NA в указанных столбцах c, используя R? - PullRequest
1 голос
/ 23 февраля 2020

У меня есть фрейм данных с несколькими столбцами. Я заинтересован в удалении любых 0 или NA из двух столбцов. Пожалуйста, см. Образец ниже.

Input <- data.frame(DM = LETTERS[1:8], JM = LETTERS[19:26], CY = c(1,2,0,NA,5,34,0,NA), LY = c(2,4,NA,NA,-5,6,0,0))

DM  JM  CY  LY
A    S  1    2
B    T  2    4
C    U  0    NA
D    V  NA   NA
E    W  5    -5
F    X  34   6
G    Y  0    0
H    Z  NA   0

Я попробовал следующее:

Output<-Input[rowSums(Input[c("CY", "LY")], na.rm = TRUE) != 0, ]

На основе кода, который я получил после вывода.

DM  JM  CY  LY
A    S  1    2
B    T  2    4
F    X  34   6

Я хотел бы получить вывод, даже если сумма равна 0. Желаемый вывод:

DM  JM  CY  LY
A    S  1    2
B    T  2    4
E    W  5    -5
F    X  34   6

Ответы [ 3 ]

1 голос
/ 23 февраля 2020

Вот два шага.

Input <- na.omit(Input)
Input[rowSums(Input[3:4] == 0) == 0, ]
#  DM JM CY LY
#1  A  S  1  2
#2  B  T  2  4
#5  E  W  5 -5
#6  F  X 34  6

И однострочник.

Input[rowSums(Input[3:4] == 0 | is.na(Input[3:4])) == 0, ]
1 голос
/ 23 февраля 2020

Вот быстрый способ удалить все NA или нули:

Input[Reduce(`&`, lapply(Input, function(x) x != 0 & !is.na(x))),]
#>   DM JM CY LY
#> 1  A  S  1  2
#> 2  B  T  2  4
#> 5  E  W  5 -5
#> 6  F  X 34  6
1 голос
/ 23 февраля 2020

Мы можем преобразовать нули в NA или NA в 0, а затем использовать rowSums в логической матрице и отменить логический вектор для подстановки строк

Input[!!rowSums(replace(Input[c("CY", "LY")],
          is.na(Input[c("CY", "LY")]), 0) != 0),]
#   DM JM CY LY
#1  A  S  1  2
#2  B  T  2  4
#5  E  W  5 -5
#6  F  X 34  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...