Подсчет количества уникальных значений в строке
Я хочу посчитать количество уникальных значений в строке.
Например, с этим фреймом данных:
example <- data.frame(var1 = c(2,3,3,2,4,5),
var2 = c(2,3,5,4,2,5),
var3 = c(3,3,4,3,4,5))
Я хочу добавить столбец, который подсчитывает количество уникальных значений в строке; например, 2 для первого ряда (так как в первом ряду 2 и 3) и 1 для второго ряда (во втором ряду только 3).
Кто-нибудь знает простой код для этого? До сих пор я нашел только код для подсчета количества уникальных значений в столбце.
2 ответа
Это apply
Функция возвращает вектор количества уникальных значений в каждой строке:
apply(example, 1, function(x)length(unique(x)))
Вы можете добавить его в свой data.frame одним из следующих двух способов (и если вы хотите назвать этот столбец как count
):
example <- cbind(example, count = apply(example, 1, function(x)length(unique(x))))
или же
example$count <- apply(example, 1, function(x)length(unique(x)))
Мы также можем использовать векторизованный подход с regex
, После paste
элементы каждого ряда набора данных (do.call(paste0, ...
), сопоставить шаблон любого персонажа, захватить как группу ((.)
), используя положительный взгляд, сопоставляйте символы только в том случае, если они появятся позже в строке (\\1
- сделать обратную ссылку для захваченной группы и заменить ее пустой (""
). Таким образом, в действительности остаются только те персонажи, которые будут уникальными. Затем с nchar
мы посчитаем количество символов в строке.
example$count <- nchar(gsub("(.)(?=.*?\\1)", "", do.call(paste0, example), perl = TRUE))
example$count
#[1] 2 1 3 3 2 1