如何在R语言中实现向量元素的全量两两拼接生成新向量?
R语言实现向量元素全两两拼接(含自身与顺序组合)
你之前用combn(v1, 2)得到的结果不完整,是因为combn生成的是无重复的无序两两组合(既不包含元素自身拼接,也不保留顺序不同的配对,比如只生成"1 1 1 2",不会生成"1 2 1 1"),其结果数量是C(18,2)=153,远小于你需要的324个(18×18)。
要生成包含所有两两拼接(含自身、含顺序差异)的结果,本质是求向量的笛卡尔积,可以用以下两种方法实现:
方法1:用expand.grid生成配对后拼接
# 生成v1与自身的笛卡尔积配对 pair_grid <- expand.grid(v1, v1, stringsAsFactors = FALSE) # 逐行拼接两个元素,得到目标向量v2 v2 <- paste(pair_grid$Var1, pair_grid$Var2, sep = " ") # 验证数量 length(v2) # 输出324
方法2:用outer函数直接拼接
outer函数可以直接对两个向量的所有元素两两执行操作,代码更简洁:
v2 <- as.vector(outer(v1, v1, function(x, y) paste(x, y, sep = " "))) # 验证数量 length(v2) # 输出324
两种方法生成的v2都会包含所有你需要的结果,比如"1 1 1 1"、"1 1 1 2"、"1 2 1 1"直到"6 3 6 3"。
内容的提问来源于stack exchange,提问作者Aoxiang Xin
相关产品推荐
相关产品推荐

