【问题标题】:How to programmatically make a data frame from vectors with some name pattern如何以编程方式从具有某种名称模式的向量制作数据框
【发布时间】:2019-04-05 17:25:51
【问题描述】:

我的环境中有多个矢量对象。所有这些向量的名称中都包含字符串“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)

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

【问题讨论】:

  • 使用data.frame(mget(ls(pattern = "column_\\d+"))) 假设向量长度相等
  • 是的,它们的长度相等。这奏效了。对mget 函数了解不多,但现在我知道了。谢谢。
  • 这些向量是从哪里来的?在您的环境中拥有一堆具有不同后缀的单独对象通常不是一个好主意。通常,这些类型的对象应该被收集在一个列表中,以便于迭代或使用它们。看到 get()mget() 表明事情可能没有以类似 R 的方式完成。
  • 你是完全正确的@MrFlick!但是,由于某种原因,我导入的环境是这样的。

标签: r dataframe


【解决方案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+")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多