12 Как я могу проверить, имеет ли вектор все одинаковые элементы? Например, скажем, у меня есть: vec1 = rep(10,20) vec2 = seq(1:20) Как я могу показать, что vec1имеет все те же элементы? r vector unique Карло источник diff(vec1)возвращает что? Руи Баррадас 1 или один uniqueэлемент Rawr 1 @rawr ответ в виде кодаlength(unique(vec1)) == 1 GWD Ответы: 12 Вариант есть diff. diff(vec1) Если элементы равны, их разность равна нулю. all(diff(vec1) == 0) #[1] TRUE Или сравните вектор с его первым элементом. all(vec1 == vec1[1]) #[1] TRUE Редактировать. Было опубликовано несколько способов определения того, равны ли все элементы вектора, см. RHertel , Юрий Сарайкин , tmfmnk . Вот сравнительные тесты. library(microbenchmark) library(ggplot2) f <- function(n){ x <- rep(10, n) mb <- microbenchmark( var = var(x) == 0, sd = sd(x) == 0, diff = all(diff(x) == 0), extract = all(x == x[1]), unique = length(unique(x)) == 1 ) mb } sizes <- c(10, 100, seq(1e3, 1e4, by = 1e3)) mb_list <- lapply(sizes, f) names(mb_list) <- sizes res <- lapply(seq_along(mb_list), function(i){ agg <- aggregate(time ~ expr, mb_list[[i]], median) agg$size <- sizes[i] agg }) res <- do.call(rbind, res) ggplot(res, aes(size, time, colour = expr)) + geom_point() + geom_line() Руи Баррадас источник 7 Используйте дисперсию. Если все элементы вектора равны, дисперсия равна нулю: allElementsEqual <- function(x) {!var(x)} #allElementsEqual(vec1) #[1] TRUE #allElementsEqual(vec2) #[1] FALSE RHertel источник 4 посчитать количество уникальных значений length(unique(vec1)) Юрий Сарайкин источник 2 Мы можем использовать n_distinctотdplyr library(dplyr) n_distinct(vec1) akrun источник 1 Вы можете преобразовать его в фактор и получить уровни, которые должны быть только 1 значение, если они все одинаковы. vec1 <- (10,20) vec <- factor(vec1) levels(vec) lonelyLearner источник 1 Вы также можете рассчитать стандартное отклонение и оценить, равно ли оно нулю: sd(vec1) == 0 [1] TRUE Или используя table(): length(table(vec1)) == 1 Или используя rle(): length(rle(vec1)$lengths) == 1 tmfmnk источник
12 Вариант есть diff. diff(vec1) Если элементы равны, их разность равна нулю. all(diff(vec1) == 0) #[1] TRUE Или сравните вектор с его первым элементом. all(vec1 == vec1[1]) #[1] TRUE Редактировать. Было опубликовано несколько способов определения того, равны ли все элементы вектора, см. RHertel , Юрий Сарайкин , tmfmnk . Вот сравнительные тесты. library(microbenchmark) library(ggplot2) f <- function(n){ x <- rep(10, n) mb <- microbenchmark( var = var(x) == 0, sd = sd(x) == 0, diff = all(diff(x) == 0), extract = all(x == x[1]), unique = length(unique(x)) == 1 ) mb } sizes <- c(10, 100, seq(1e3, 1e4, by = 1e3)) mb_list <- lapply(sizes, f) names(mb_list) <- sizes res <- lapply(seq_along(mb_list), function(i){ agg <- aggregate(time ~ expr, mb_list[[i]], median) agg$size <- sizes[i] agg }) res <- do.call(rbind, res) ggplot(res, aes(size, time, colour = expr)) + geom_point() + geom_line() Руи Баррадас источник
7 Используйте дисперсию. Если все элементы вектора равны, дисперсия равна нулю: allElementsEqual <- function(x) {!var(x)} #allElementsEqual(vec1) #[1] TRUE #allElementsEqual(vec2) #[1] FALSE RHertel источник
1 Вы можете преобразовать его в фактор и получить уровни, которые должны быть только 1 значение, если они все одинаковы. vec1 <- (10,20) vec <- factor(vec1) levels(vec) lonelyLearner источник
1 Вы также можете рассчитать стандартное отклонение и оценить, равно ли оно нулю: sd(vec1) == 0 [1] TRUE Или используя table(): length(table(vec1)) == 1 Или используя rle(): length(rle(vec1)$lengths) == 1 tmfmnk источник
diff(vec1)
возвращает что?unique
элементlength(unique(vec1)) == 1
Ответы:
Вариант есть
diff
.Если элементы равны, их разность равна нулю.
Или сравните вектор с его первым элементом.
Редактировать.
Было опубликовано несколько способов определения того, равны ли все элементы вектора, см. RHertel , Юрий Сарайкин , tmfmnk . Вот сравнительные тесты.
источник
Используйте дисперсию. Если все элементы вектора равны, дисперсия равна нулю:
источник
посчитать количество уникальных значений
источник
Мы можем использовать
n_distinct
отdplyr
источник
Вы можете преобразовать его в фактор и получить уровни, которые должны быть только 1 значение, если они все одинаковы.
источник
Вы также можете рассчитать стандартное отклонение и оценить, равно ли оно нулю:
Или используя
table()
:Или используя
rle()
:источник