根据规则均衡R中3个向量的长度

时间:2017-12-15 19:36:49

标签: r function vector

假设我有3个向量xyz长度不等(见下面的代码)。

我想知道如何重复较短的向量(此处xy )的最后一个成员,以便每当长度不等时,3个向量总是变得相等?

例如,在下面的示例中,2中的x重复2次,"hi"中的y重复3次。

x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4)

2 个答案:

答案 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