คำตอบ:
diff
ตัวเลือกคือ
diff(vec1)
หากองค์ประกอบเท่ากันความแตกต่างจะเป็นศูนย์
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()
ใช้ความแปรปรวน หากองค์ประกอบทั้งหมดของเวกเตอร์เท่ากันความแปรปรวนเป็นศูนย์:
allElementsEqual <- function(x) {!var(x)}
#allElementsEqual(vec1)
#[1] TRUE
#allElementsEqual(vec2)
#[1] FALSE
นับจำนวนค่าที่ไม่ซ้ำ
length(unique(vec1))
เราสามารถใช้n_distinct
จากdplyr
library(dplyr)
n_distinct(vec1)
คุณสามารถแปลงให้เป็นปัจจัยและรับระดับซึ่งควรเป็น 1 ค่าเท่านั้นหากพวกเขาเหมือนกันทั้งหมด
vec1 <- (10,20)
vec <- factor(vec1)
levels(vec)
คุณสามารถคำนวณค่าเบี่ยงเบนมาตรฐานและประเมินว่าเป็นศูนย์หรือไม่:
sd(vec1) == 0
[1] TRUE
หรือใช้table()
:
length(table(vec1)) == 1
หรือใช้rle()
:
length(rle(vec1)$lengths) == 1
diff(vec1)
ส่งคืนอะไร