如果超过 R 中的长度,则对向量进行子集化并检索第一个元素
Subset a vector and retrieve first elements if exceed the length in R
假设我有一个这样的向量:
c("A", "B", "C", "D")
有 4 个位置。如果我制作一个大小为 1 的样本,我可以获得 1、2、3 或 4。我想要的是能够根据该向量的顺序对该向量的长度 3 进行子集化,例如,如果我得到 2:
c("B", "C", "D")
如果我得到 3:
c("C", "D", "A")
如果我得到 4:
c("D","A", "B")
这就是逻辑,向量被排序,当我子集化时,最后的元素与第一个元素连接。
我想我明白了!
v <- c("A", "B", "C", "D")
p <- sample(1:length(v), 1)
r <- c(v[p:length(v)])
c(r, v[!(v %in% r)])[1:3]
输出:
v <- c("A", "B", "C", "D") # your vector
r <- c(v[2:length(v)])
c(r, v[!(v %in% r)])[1:3]
#> [1] "B" "C" "D"
r <- c(v[3:length(v)])
c(r, v[!(v %in% r)])[1:3]
#> [1] "C" "D" "A"
r <- c(v[4:length(v)])
c(r, v[!(v %in% r)])[1:3]
#> [1] "D" "A" "B"
由 reprex package (v2.0.1)
于 2022-05-16 创建
包装在函数中:
f <- function(v, nth) {
r <- c(v[nth:length(v)])
return(c(r, v[!(v %in% r)])[1:3])
}
使用 seq
、f
为您提供指定向量 v
所需的子集,您希望将其中 l
个元素的起点设为子集第 n
个位置。
f <- function(v, n, l) v[seq(n - 1, length.out = l) %% length(v) + 1]
输出
f(v, n = 4, l = 3)
#[1] "D" "A" "B"
f(v, n = 3, l = 4)
#[1] "C" "D" "A" "B"
f(v, n = 2, l = 5)
#[1] "B" "C" "D" "A" "B"
假设我有一个这样的向量:
c("A", "B", "C", "D")
有 4 个位置。如果我制作一个大小为 1 的样本,我可以获得 1、2、3 或 4。我想要的是能够根据该向量的顺序对该向量的长度 3 进行子集化,例如,如果我得到 2:
c("B", "C", "D")
如果我得到 3:
c("C", "D", "A")
如果我得到 4:
c("D","A", "B")
这就是逻辑,向量被排序,当我子集化时,最后的元素与第一个元素连接。
我想我明白了!
v <- c("A", "B", "C", "D")
p <- sample(1:length(v), 1)
r <- c(v[p:length(v)])
c(r, v[!(v %in% r)])[1:3]
输出:
v <- c("A", "B", "C", "D") # your vector
r <- c(v[2:length(v)])
c(r, v[!(v %in% r)])[1:3]
#> [1] "B" "C" "D"
r <- c(v[3:length(v)])
c(r, v[!(v %in% r)])[1:3]
#> [1] "C" "D" "A"
r <- c(v[4:length(v)])
c(r, v[!(v %in% r)])[1:3]
#> [1] "D" "A" "B"
由 reprex package (v2.0.1)
于 2022-05-16 创建包装在函数中:
f <- function(v, nth) {
r <- c(v[nth:length(v)])
return(c(r, v[!(v %in% r)])[1:3])
}
使用 seq
、f
为您提供指定向量 v
所需的子集,您希望将其中 l
个元素的起点设为子集第 n
个位置。
f <- function(v, n, l) v[seq(n - 1, length.out = l) %% length(v) + 1]
输出
f(v, n = 4, l = 3)
#[1] "D" "A" "B"
f(v, n = 3, l = 4)
#[1] "C" "D" "A" "B"
f(v, n = 2, l = 5)
#[1] "B" "C" "D" "A" "B"