Ответ 1
Или используя unique
:
rapply(DF,function(x)length(unique(x)))
v1 v2
3 2
Я хочу получить количество уникальных значений в каждом столбце кадра данных. Скажем, у меня есть следующий фрейм данных:
DF <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))
то он должен вернуть, что для v1 есть 3 различных значения, а для v2 - 2.
Я пробовал уникальный (DF), но он не работает, поскольку каждая строка отличается.
Или используя unique
:
rapply(DF,function(x)length(unique(x)))
v1 v2
3 2
sapply(DF, function(x) length(unique(x)))
Здесь один подход:
> lapply(DF, function(x) length(table(x)))
$v1
[1] 3
$v2
[1] 2
В основном это табулирует уникальные значения для каждого столбца. Используя length
, на котором указывается номер. Удаление length
покажет вам фактическую таблицу уникальных значений.
В dplyr
:
DF %>% summarise_all(funs(n_distinct(.)))
Для полноты: с версии 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()
здесь.
Я думаю, что такая функция даст вам то, что вы ищете. Это также показывает уникальные значения, в дополнение к количеству 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
Это даст вам уникальные значения в фрейме данных DF столбца 1.
unique(sc_data[,1])