如何在R中查找不同长度的向量?

如何在R中查找不同长度的向量?,r,vector,cbind,R,Vector,Cbind,我需要将R中的一些命名数字向量组合成一个数据帧。我在另一个问题中尝试了cbind.na作为建议集,但它不考虑名称。例如: v1 <- c(1,5,6,7) names(v1) <- c("milk", "flour", "eggs", "sugar") v2 <- c(2,3) names(v2) <- c("fish", "chips") v3 <- c(5,7,4) names(v3) <- c("chips", "milk", "sugar") 我不知

我需要将R中的一些命名数字向量组合成一个数据帧。我在另一个问题中尝试了cbind.na作为建议集,但它不考虑名称。例如:

v1 <- c(1,5,6,7)
names(v1) <- c("milk", "flour", "eggs", "sugar")
v2 <- c(2,3)
names(v2) <- c("fish", "chips")
v3 <- c(5,7,4)
names(v3) <- c("chips", "milk", "sugar")

我不知道如何在R中解决这个问题。

这是一个连接,最好使用data.table或其他外接程序完成,但特别是对于小型数组,可以通过创建包含所有名称的数组并使用它索引到输入数组中,在base R中轻松执行:

s <- unique(names(c(v1,v2,v3)))
x <- cbind(v1=v1[s], v2=v2[s], v3=v3[s])
rownames(x) <- s
print(x)

这是一种连接,最好使用data.table或其他外接程序完成,但特别是对于小型数组,可以在base R中通过创建一个包含所有名称的数组并使用它索引到输入数组中来轻松执行:

s <- unique(names(c(v1,v2,v3)))
x <- cbind(v1=v1[s], v2=v2[s], v3=v3[s])
rownames(x) <- s
print(x)
编辑: 我认为这比whuber的解决方案更糟糕,因为它需要在lappy步骤和Reduce步骤中创建一组中间表。不过,我还没有做过任何基准测试

编辑:
我认为这比whuber的解决方案更糟糕,因为它需要在lappy步骤和Reduce步骤中创建一组中间表。不过我还没有做过任何基准测试。

@RichardHardy对不起。我不知道,不用担心!我只是解释为什么你可能得不到你想要的答案。也许可以尝试一些特定于R的站点。我认为您正在尝试创建一个标记因子,或者在这种情况下,列的含义是什么?尝试从dplyr绑定cols。您需要从dplyr执行完全联接package@RichardHardy我很抱歉。我不知道,不用担心!我只是解释为什么你可能得不到你想要的答案。也许可以尝试一些特定于R的站点。我认为您正在尝试创建一个标记因子,或者在这种情况下,列的含义是什么?尝试从dplyr绑定cols。您需要从dplyr Packagence方法执行完全联接。您可以将其矢量化,这样就不必键入所有变量名,以防出现>3:v@icecreamTouch。谢谢。我考虑过这样做,但认为这可能会掩盖答案:很高兴看到cbind在解决方案中突出显示。但对于许多数组的泛化,类似于您的方法是一种方法。很好的方法。您可以将其矢量化,这样就不必键入所有变量名,以防出现>3:v@icecreamTouch。谢谢。我考虑过这样做,但认为这可能会掩盖答案:很高兴看到cbind在解决方案中突出显示。但是对于许多数组的泛化来说,类似于您的方法是一种方法。
      v1 v2 v3
milk   1 NA  7
flour  5 NA NA
eggs   6 NA NA
sugar  7 NA  4
fish  NA  2 NA
chips NA  3  5
# get vectors into one list
v <- mget(paste0('v', 1:3))
# convert vectors to data frames
l <- lapply(v, stack)
# merge them all sequentially
out <- Reduce(function(x, y) merge(x, y, by = 'ind', all = T), l)
# name the columns according to the original vector names
setNames(out, c('ind', names(v)))

#     ind v1 v2 v3
# 1  milk  1 NA  7
# 2 flour  5 NA NA
# 3  eggs  6 NA NA
# 4 sugar  7 NA  4
# 5  fish NA  2 NA
# 6 chips NA  3  5