假设我有3个向量x
,y
和z
长度不等(见下面的代码)。
我想知道如何重复较短的向量(此处x
和y
)的最后一个成员,以便每当长度不等时,3个向量总是变得相等?
例如,在下面的示例中,2
中的x
重复2次,"hi"
中的y
重复3次。
x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4)
答案 0 :(得分:3)
既然你说你的向量是不同的(即规则),那么这样:
is.df <- function(...) length(unique(lengths(list(...)))) != 1
cr <- function(...) c(x, rep(rev(x)[1], max(lengths(list(...))) - length(x)))
x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4)
if(is.df(x, y, z)){ x = cr(x, y, z) ; y = cr(y, x, z) ; z = cr(z, x, y) }
# x
# [1] 1 2 2 2
# y
# [1] "hi" "hi" "hi" "hi"
# z
# [1] 1 2 3 4
答案 1 :(得分:3)
foo = function(...){
ml = list(...)
L = max(lengths(ml))
lapply(ml, function(x) c(x, rep(tail(x, 1), L - length(x))))
}
foo(x, y, z)
#[[1]]
#[1] 1 2 2 2
#[[2]]
#[1] "hi" "hi" "hi" "hi"
#[[3]]
#[1] 1 2 3 4