Как фильтровать столбцы с ТОЛЬКО указанными c значениями в R? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть набор данных с некоторыми фиктивными переменными, которые закодированы как 1 и 2 вместо единиц и нулей. Набор данных большой, но я хочу идентифицировать все столбцы ТОЛЬКО 1, 2 и NA, чтобы изменить их на 1 и 0. Я использовал df %>% filter_all(any_vars(. %in% c('1', '2'))), но некоторые переменные также кодируются числами от 1 до 5 (или даже больше), поэтому я хочу, чтобы они были исключены из преобразования.

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Если нам нужно изменить эти столбцы, можно использовать mutate_all

library(dplyr)
df2 <- df1 %>%
         mutate_if(is.numeric, ~
          if(length(setdiff(unique(na.omit(.)), c(1, 2))) ==0) .-1 else .)
df2
#   col1 col2 grp       col3 col4
#1    1    0   a -0.5458808    5
#2    2    1   b  0.5365853    7
#3    3   NA   c  0.4196231    1
#4    4    0   d -0.5836272    2
#5    5    1   e  0.8474600    3

Для выбора столбцов select или select_if будет более полезным, чем filter, так как filter предназначен для фильтрации строк вместо столбцов

df1 %>%
     select_if(~ length(setdiff(unique(na.omit(.)), c(1, 2))) ==0)
#  col2
#1    1
#2    2
#3   NA
#4    1
#5    2

data

set.seed(24)
df1 <- data.frame(col1 = 1:5, col2 = rep(c(1:2, NA), length.out = 5),
       grp = letters[1:5], col3 = rnorm(5), col4 = c(5, 7, 1, 2, 3) )
0 голосов
/ 17 марта 2020

Предполагая, что вы хотите оставить 1 как 1 и 2 как 0, мы можем использовать mutate_if, чтобы выбрать только те столбцы, которые имеют значение 1, 2 или NA и изменить их.

library(dplyr)
df %>% mutate_if(~all(. %in% c(1, 2, NA)), ~as.integer(. == 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...