【问题标题】:Create a dataframe from vector values and their names从向量值及其名称创建数据框
【发布时间】:2022-11-11 01:18:21
【问题描述】:

我有一组 50 个向量,并想从这 50 个向量值及其名称创建一个数据框,如下例所示。

示例有 3 个向量,但实际是大约 50 个向量。

vector_a<- c("a1","a2", "a3","a4")
vector_cx<- c("1","2","3")
vector_3 <-c("x1","x2")

预期结果。

data.frame(values=c("a1","a2", "a3","a4","1","2","3","x1","x2"),
                vector_names=c("vector_a","vector_a", "vector_a","vector_a","vector_cx","vector_cx","vector_cx","vector_3","vector_3"))

上面的代码生成下表。

  values vector_names
1     a1     vector_a
2     a2     vector_a
3     a3     vector_a
4     a4     vector_a
5      1    vector_cx
6      2    vector_cx
7      3    vector_cx
8     x1     vector_3
9     x2     vector_3

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用管理将向量放入列表中,然后将列表转换为数据框:

    stack(mget(ls(pattern = "^vector_")))
    #   values       ind
    # 1     x1  vector_3
    # 2     x2  vector_3
    # 3     a1  vector_a
    # 4     a2  vector_a
    # 5     a3  vector_a
    # 6     a4  vector_a
    # 7      1 vector_cx
    # 8      2 vector_cx
    # 9      3 vector_cx
    

    而不是使用ls,我们可以硬编码向量名称:

    stack(mget(c("vector_a", "vector_cx", "vector_3")))
    

    【讨论】:

    • 您能否编辑您的答案并添加作为第二个选项,而不是使用模式名称作为“^vector_”)只给出像 c(“vector_a”,“vector_cx”,“vector_3”)这样的向量名称,因为真正的向量名称不完全遵循任何模式。我猜是这样的?堆栈(mget(ls(模式=“vector_a|vector_cx|vector_3”)))
    • @LuisCarmonaMartinez 是的,我们可以对向量名称进行硬编码。但是带有模式的ls 更加自动化。
    【解决方案2】:

    与上述相比,绝对是一个更糟糕的答案。

    也可以使用purrr实现栈

    vector_a<- c("a1","a2", "a3","a4")
    vector_cx<- c("1","2","3")
    vector_3 <-c("x1","x2")
    
    
    map2_df(list(vector_a, vector_cx), c(deparse(substitute(vector_a)), deparse(substitute(vector_cx))), ~data.frame(.x) %>% mutate(vector_name = .y))
    
    output -----
    
      .x vector_name
    1 a1    vector_a
    2 a2    vector_a
    3 a3    vector_a
    4 a4    vector_a
    5  1   vector_cx
    6  2   vector_cx
    7  3   vector_cx
    
    
    

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 2022-08-09
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多