Подтвердить что ты не робот

Уникальные значения в каждом столбце кадра данных

Я хочу получить количество уникальных значений в каждом столбце кадра данных. Скажем, у меня есть следующий фрейм данных:

DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))

то он должен вернуть, что для v1 есть 3 различных значения, а для v2 - 2.

Я пробовал уникальный (DF), но он не работает, поскольку каждая строка отличается.

4b9b3361

Ответ 1

Или используя unique:

rapply(DF,function(x)length(unique(x)))
v1 v2 
 3  2 

Ответ 2

sapply(DF, function(x) length(unique(x)))

Ответ 3

Здесь один подход:

> lapply(DF, function(x) length(table(x)))
$v1
[1] 3

$v2
[1] 2

В основном это табулирует уникальные значения для каждого столбца. Используя length, на котором указывается номер. Удаление length покажет вам фактическую таблицу уникальных значений.

Ответ 4

В dplyr:

DF %>% summarise_all(funs(n_distinct(.)))

Ответ 5

Для полноты: с версии CRAN версии 1.9.6 от 19 сентября 2015 года пакет data.table включает вспомогательную функцию uniqueN(), которая избавляет нас от записи

function(x) length(unique(x))

при вызове одного из братьев и сестер apply():

sapply(DF, data.table::uniqueN)
v1 v2 
 3  2

Обратите внимание, что ни один пакет data.table не должен быть загружен, а DF принужден к классу data.table, чтобы использовать uniqueN() здесь.

Ответ 6

Я думаю, что такая функция даст вам то, что вы ищете. Это также показывает уникальные значения, в дополнение к количеству NA в каждом столбце данных. Просто подключите свой фреймворк, и вам хорошо идти.

totaluniquevals <- function(df) {
  x <<- data.frame("Row Name"= numeric(0), "TotalUnique"=numeric(0), "IsNA"=numeric(0))
  result <- sapply(df, function(x) length(unique(x)))
  isnatotals <- sapply(df, function(x) sum(is.na(x)))

  #Now Create the Row names
  for (i in 1:length(colnames(df))) {
    x[i,1] <<- (names(result[i]))
    x[i,2] <<- result[[i]]
    x[i,3] <<- isnatotals[[i]]

  }
  return(x)
}

Тест:

DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))
totaluniquevals(DF)
  Row.Name TotalUnique IsNA
1       v1           3    0
2       v2           2    0

Затем вы можете использовать уникальный в любом столбце, чтобы узнать, какие конкретные уникальные значения.

единственна (DF $v2) [1] a b Уровни: a b

Ответ 7

Это даст вам уникальные значения в фрейме данных DF столбца 1.

unique(sc_data[,1])