如何以编程的方式从具有一定命名模式的向量创建数据框架

4

我在环境中有多个向量对象。所有这些向量的名称都包含字符串“column”。例如,我有名为column_1、column_2等的向量对象。

如何通过编程方式创建一个数据框,使得所有这些向量成为数据框的列,而不需要手动输入向量的名称?

我不想简单地说:

data.frame(column_1, column_2, ...)

有没有使用apply()do.call()函数的方法?

我已经完成了这个任务。

vec_list <- grep("column", ls(), value=T)

但是这样做不起作用

data.frame(vec_list)

我希望输出一个数据框,其中向量对象作为数据框的列。

3
请使用 data.frame(mget(ls(pattern = "column_\\d+"))),假设向量长度相等。 - akrun
是的,它们的长度相等。而且这个方法很有效。我之前不太了解mget函数,现在我知道了。谢谢。 - A. Hada
1
这些向量从哪里来的?通常在环境中拥有许多具有不同后缀的单独对象并不是一个好主意。通常,这些类型的对象应该首先被收集到一个列表中,以便于迭代或处理它们。看到 get()mget() 是一种迹象,表明事情可能没有按照 R 的方式完成。 - MrFlick
您是完全正确的 @MrFlick! 但是,由于某种原因,我导入的环境就是这样。 - A. Hada
1个回答

1
如果您有长度不同的向量,则可以使用类似以下内容的内容-

样本数据-

column_1 <- c("a","b","c")
column_2 <- c("a","b","c","d")
column_3 <- c(1,2,3,4,5,6)

> data.frame(lapply(mget(ls(pattern = "column_\\d+")), "length<-", max(lengths(mget(ls(pattern = "column_\\d+"))))))

  column_1 column_2 column_3
1        a        a        1
2        b        b        2
3        c        c        3
4     <NA>        d        4
5     <NA>     <NA>        5
6     <NA>     <NA>        6

注意- 如果您有相等长度的向量,则@akrun提供的解决方案是最佳的。

data.frame(mget(ls(pattern = "column_\\d+")))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接