12 Jak mogę sprawdzić, czy wektor ma te same elementy? Powiedzmy na przykład, że mam: vec1 = rep(10,20) vec2 = seq(1:20) Jak mogę pokazać, że vec1mają te same elementy? r vector unique Carlo źródło diff(vec1)zwraca co? Rui Barradas 1 lub jeden uniqueelement rawr 1 @rawr odpowiedź jako kodlength(unique(vec1)) == 1 GWD Odpowiedzi: 12 Opcją jest diff. diff(vec1) Jeśli elementy są równe, ich różnica wynosi zero. all(diff(vec1) == 0) #[1] TRUE Lub porównaj wektor z jego pierwszym elementem. all(vec1 == vec1[1]) #[1] TRUE Edytować. Opublikowano kilka sposobów określania, czy wszystkie elementy wektora są równe, patrz RHertel , Yuriy Saraykin , tmfmnk . Oto testy porównawcze. 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() Rui Barradas źródło 7 Użyj wariancji. Jeśli wszystkie elementy wektora są równe, wariancja wynosi zero: allElementsEqual <- function(x) {!var(x)} #allElementsEqual(vec1) #[1] TRUE #allElementsEqual(vec2) #[1] FALSE RHertel źródło 4 policzyć liczbę unikalnych wartości length(unique(vec1)) Jurij Sarajkin źródło 2 Możemy korzystać n_distinctzdplyr library(dplyr) n_distinct(vec1) akrun źródło 1 Możesz przekonwertować go na czynnik i uzyskać poziomy, które powinny być tylko 1 wartością, jeśli wszystkie są takie same. vec1 <- (10,20) vec <- factor(vec1) levels(vec) samotny Uczeń źródło 1 Możesz również obliczyć odchylenie standardowe i ocenić, czy wynosi zero: sd(vec1) == 0 [1] TRUE Lub używając table(): length(table(vec1)) == 1 Lub używając rle(): length(rle(vec1)$lengths) == 1 tmfmnk źródło
12 Opcją jest diff. diff(vec1) Jeśli elementy są równe, ich różnica wynosi zero. all(diff(vec1) == 0) #[1] TRUE Lub porównaj wektor z jego pierwszym elementem. all(vec1 == vec1[1]) #[1] TRUE Edytować. Opublikowano kilka sposobów określania, czy wszystkie elementy wektora są równe, patrz RHertel , Yuriy Saraykin , tmfmnk . Oto testy porównawcze. 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() Rui Barradas źródło
7 Użyj wariancji. Jeśli wszystkie elementy wektora są równe, wariancja wynosi zero: allElementsEqual <- function(x) {!var(x)} #allElementsEqual(vec1) #[1] TRUE #allElementsEqual(vec2) #[1] FALSE RHertel źródło
1 Możesz przekonwertować go na czynnik i uzyskać poziomy, które powinny być tylko 1 wartością, jeśli wszystkie są takie same. vec1 <- (10,20) vec <- factor(vec1) levels(vec) samotny Uczeń źródło
1 Możesz również obliczyć odchylenie standardowe i ocenić, czy wynosi zero: sd(vec1) == 0 [1] TRUE Lub używając table(): length(table(vec1)) == 1 Lub używając rle(): length(rle(vec1)$lengths) == 1 tmfmnk źródło
diff(vec1)
zwraca co?unique
elementlength(unique(vec1)) == 1
Odpowiedzi:
Opcją jest
diff
.Jeśli elementy są równe, ich różnica wynosi zero.
Lub porównaj wektor z jego pierwszym elementem.
Edytować.
Opublikowano kilka sposobów określania, czy wszystkie elementy wektora są równe, patrz RHertel , Yuriy Saraykin , tmfmnk . Oto testy porównawcze.
źródło
Użyj wariancji. Jeśli wszystkie elementy wektora są równe, wariancja wynosi zero:
źródło
policzyć liczbę unikalnych wartości
źródło
Możemy korzystać
n_distinct
zdplyr
źródło
Możesz przekonwertować go na czynnik i uzyskać poziomy, które powinny być tylko 1 wartością, jeśli wszystkie są takie same.
źródło
Możesz również obliczyć odchylenie standardowe i ocenić, czy wynosi zero:
Lub używając
table()
:Lub używając
rle()
:źródło