Удалить столбцы по значениям шаблонов в R - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть фрейм данных, такой как:

g1   g2   g3   g4   g5
2    0    1    0    1
2    1    1    0    1
2    1    1    2    1

, и я хотел бы удалить каждый столбец, у которого есть хотя бы одно значение 2.

и получить новый df:

g2   g3   g5
0    1    1
1    1    1
1    1    1

Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Мы можем использовать функцию select_if с функцией предиката для достижения этой цели.

library(dplyr)

dat2 <- dat %>% select_if(function(x) !any(x == 2))
dat2
#   g2 g3 g5
# 1  0  1  1
# 2  1  1  1
# 3  1  1  1

ДАННЫЕ

dat <- read.table(text = "g1   g2   g3   g4   g5
2    0    1    0    1
                  2    1    1    0    1
                  2    1    1    2    1",
                      header = TRUE, stringsAsFactors = FALSE)
0 голосов
/ 27 февраля 2019

Мы также можем использовать purrr:

df[,map_lgl(df,~sum(.x==2)<1)]


   g2 g3 g5
1  0  1  1
2  1  1  1
3  1  1  1
0 голосов
/ 27 февраля 2019

Мы можем использовать colSums здесь:

df <- data.frame(g1=c(2,2,2), g2=c(0,1,1), g3=c(1,1,1), g4=c(0,0,2), g5=c(1,1,1))
df[, !colSums(df==2)]

  g2 g3 g5
1  0  1  1
2  1  1  1
3  1  1  1

Идея состоит в том, чтобы включить все строки из исходного фрейма данных, но включить только те столбцы, которые никогда не имеют значения 2. В этом случаевызов colSums() будет равен нулю, что логически эквивалентно false в R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...