벡터가 동일한 요소로 구성되어 있는지 확인하는 방법은 무엇입니까?


12

벡터에 모두 같은 요소가 있는지 어떻게 확인할 수 있습니까?

예를 들어 내가 가지고 있다고 가정 해 봅시다.

vec1 = rep(10,20)
vec2 = seq(1:20)

vec1모든 요소가 동일한 것을 어떻게 표시 할 수 있습니까?


diff(vec1)무엇을 반환합니까?
Rui Barradas

1
또는 하나 개의 unique요소
의 RaWR

1
@rawr 코드로 응답length(unique(vec1)) == 1
GWD

답변:


12

옵션은 diff입니다.

diff(vec1)

요소가 같으면 차이가 0입니다.

all(diff(vec1) == 0)
#[1] TRUE

또는 벡터를 첫 번째 요소와 비교하십시오.

all(vec1 == vec1[1])
#[1] TRUE

편집하다.

벡터의 모든 요소가 동일한 지 확인하는 여러 가지 방법이 게시되어 있습니다 ( RHertel , Yuriy Saraykin , 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

분산을 사용하십시오. 벡터의 모든 요소가 같으면 분산은 0입니다.

allElementsEqual <- function(x) {!var(x)}

#allElementsEqual(vec1)
#[1] TRUE
#allElementsEqual(vec2)
#[1] FALSE


2

우리는 사용할 수 있습니다 n_distinct에서dplyr

library(dplyr)
n_distinct(vec1)

1

팩터로 변환하여 레벨이 모두 같으면 1 값이어야하는 레벨을 얻을 수 있습니다.

vec1 <- (10,20)

vec <- factor(vec1)

levels(vec)

1

표준 편차를 계산하고 0인지 여부를 평가할 수도 있습니다.

sd(vec1) == 0

[1] TRUE

또는 사용 table():

length(table(vec1)) == 1

또는 사용 rle():

length(rle(vec1)$lengths) == 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.