отфильтровать столбцы, где все значения равны 1 - PullRequest
0 голосов
/ 09 декабря 2018

У меня огромный фрейм данных.Я хотел бы отфильтровать столбцы, все значения которых равны 1.

Вот пример моих данных.

A = c(1,2,3,4,5,6,1,1,1,1,1,1,2,3,1,4,5,6,1,1,1,1,1,1,2,3,4,1,3,3,1,1,1,1,1,1)
M  <- matrix(A, ncol = 6, nrow  = 6, byrow = F)


      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    2    1    2    1
[2,]    2    1    3    1    3    1
[3,]    3    1    1    1    4    1
[4,]    4    1    4    1    1    1
[5,]    5    1    5    1    3    1
[6,]    6    1    6    1    3    1

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

      [,1] [,2] [,3]
[1,]    1    2    2
[2,]    2    3    3
[3,]    3    1    4
[4,]    4    4    1
[5,]    5    5    3
[6,]    6    6    3

Я хотел бы использовать функцию фильтра из dplyr или другие функции R.У вас есть идеи, как я могу это сделать?Спасибо

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вы можете использовать colMeans(M == 1), чтобы получить процентное содержание каждого столбца, равное 1, затем выбрать те столбцы, для которых этот процент не равен 1 (т. Е. 100%).

M[, colMeans(M == 1) != 1]

#      [,1] [,2] [,3]
# [1,]    1    2    2
# [2,]    2    3    3
# [3,]    3    1    4
# [4,]    4    4    1
# [5,]    5    5    3
# [6,]    6    6    3

Если у вас есть фрейм данных, решение dplyr должно использовать select_if

library(dplyr)

df %>% 
  select_if(~ any(. != 1))

#   V1 V3 V5
# 1  1  2  2
# 2  2  3  3
# 3  3  1  4
# 4  4  4  1
# 5  5  5  3
# 6  6  6  3

Обратите внимание, что и colMeans, и any имеют аргумент na.rm, который можно использовать, если ваши данные имеютNA значений.

0 голосов
/ 09 декабря 2018

Не уверен, что вы имеете в виду, я предоставлю оба.

Матрица

M[, apply(M, 2, function(a) !all(a == 1)) ]
#      [,1] [,2] [,3]
# [1,]    1    2    2
# [2,]    2    3    3
# [3,]    3    1    4
# [4,]    4    4    1
# [5,]    5    5    3
# [6,]    6    6    3

Фрейм данных

D <- as.data.frame(M)
D[,sapply(D, function(a) !all(a == 1))]
#   V1 V3 V5
# 1  1  2  2
# 2  2  3  3
# 3  3  1  4
# 4  4  4  1
# 5  5  5  3
# 6  6  6  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...