Существует ли функция R для фильтрации кадра данных, в котором хранятся столбцы со всеми совпадающими значениями? - PullRequest
0 голосов
/ 18 февраля 2019

У меня большой фрейм данных с 5 строками, но ~ 100 тыс. Столбцами.Я хотел бы сохранить столбцы, в которых все значения в столбце совпадают.

Это образец кадра данных

> df
  Mouse JAX00000010 JAX00000010r UNCHS000003 JAX00240606 JAX00240613 JAX00240636 UNCHS000005
1   407          BF           BF          BF          BF          BF          BF          BF
2   410          BH           BH          BH          BH          BH          BH          BH
3   426          BD           BD          BD          BD          BD          BD          BD
4   447          BC           BC          BC          BC          BC          BC          BC
5    87          BF           BF          BF          BF          BF          BF          BF

Я хотел бы сохранить все столбцы, которые имеют одинаковое значениетакие как «BB».Я не сталкивался с функцией, которая делает это, хотя я уверен, что это что-то простое.Спасибо за вашу помощь!

Ответы [ 3 ]

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

В базе R:

# Your data
df <- read.table(header = TRUE, text = "
Mouse JAX00000010 JAX00000010r UNCHS000003 JAX00240606 JAX00240613 JAX00240636 UNCHS000005
1   407          BF           BF          BF          BF          BB          BF          BF
2   410          BH           BH          BH          BH          BB          BH          BH
3   426          BD           BD          BD          BD          BB          BD          BD
4   447          BC           BC          BC          BC          BB          BC          BC
5    87          BF           BF          BF          BF          BB          BF          BF")

# Get cols
get.cols <- which(apply(df[,-1] == "BB", 2, all))
df[,c(1, get.cols + 1)]
#  Mouse JAX00240613
#1   407          BB
#2   410          BB
#3   426          BB
#4   447          BB
#5    87          BB

Редактировать Упс, я неправильно понял вопрос как конкретную строку поиска.Если это не так, и вы ищете столбцы только с одним значением, то работает следующее:

get.cols <- which(apply(df, 2, function(x) length(unique(x)) == 1))
df[, c(1, get.cols)]
#  Mouse JAX00240613
#1   407          BB
#2   410          BB
#3   426          BB
#4   447          BB
#5    87          BB

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

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

A purrr подход:

library(purrr)
df %>% keep(~ length(unique(.x)) == 1)

NB - вы можете инвертировать это с помощью discard: df %>% discard(~ length(unique(.x)) == 1).

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

Попробуйте

df[, sapply(df, function(x) length(unique(x)) == 1]

Или используйте Filter

Filter(function(x) length(unique(x)) == 1, df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...