Если еще логика для одного столбца во фрейме данных, то применяется ко всем столбцам - PullRequest
0 голосов
/ 22 апреля 2019

Как я могу сделать во фрейме данных, если определенное условие применяется к одному столбцу, тогда все строки для этого фрейма данных будут нулевыми.

Например, у меня был фрейм данных.

A<- c(2,3,5,6,5,7,8,5)
B <- c("AB", "BC", "CD", "DE", "EF", "FG", "HI", "IJ")
C <- c("X", "Y", "Z", "W", "X", "Y", "Z", "W")
ABC <-data.frame(A,B,C)
> ABC
  A  B C
1 2 AB X
2 3 BC Y
3 5 CD Z
4 6 DE W
5 5 EF X
6 7 FG Y
7 8 HI Z
8 5 IJ W

И я хочу, чтобы каждый ABC$A равнялся 5, тогда все ряды, соединенные с 5, будут NULL или NA.

Мой желаемый вывод должен выглядеть следующим образом:

> ABC
  A    B    C
1 2   AB    X
2 3   BC    Y
3 5 <NA> <NA>
4 6   DE    W
5 5 <NA> <NA>
6 7   FG    Y
7 8   HI    Z
8 5 <NA> <NA>

ifelse функция могла бы сделать эту работу, но что, если бы у меня было много столбцов.И я хочу, чтобы он применялся ко всем столбцам, кроме A.

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Вы можете использовать поднабор строк / столбцов и назначить NA s для всех столбцов напрямую.

ABC[ABC$A == 5, -1] <- NA

ABC
#  A    B    C
#1 2   AB    X
#2 3   BC    Y
#3 5 <NA> <NA>
#4 6   DE    W
#5 5 <NA> <NA>
#6 7   FG    Y
#7 8   HI    Z
#8 5 <NA> <NA>

Здесь -1 - игнорировать первый столбец A, поскольку мы не хотим изменять какие-либо значения в этом столбце.


Некоторые другие варианты

ABC[-1] <- lapply(ABC[-1], function(x) replace(x, ABC$A == 5, NA))

и с использованием dplyr

library(dplyr)
ABC %>%  mutate_at(-1, ~replace(., A == 5, NA))
0 голосов
/ 22 апреля 2019

Мы можем использовать na_if

library(dplyr)
ABC %>%
     mutate_at(-1, list(~ na_if(A, y = 5)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...