【问题标题】:R: Combine a list to a data frameR:将列表组合到数据框
【发布时间】:2013-04-23 22:31:36
【问题描述】:

我有一个名称数组和一个返回数据框的函数。我想结合这个数组和数据框。例如:

>mynames<-c("a", "b", "c")
>df1 <- data.frame(val0=c("d", "e"),val1=4:5)
>df2 <- data.frame(val1=c("e", "f"),val2=5:6)
>df3 <- data.frame(val2=c("f", "g"),val3=6:7)

我想要的是一个将这个数组与数据框连接起来的数据框。 df1 对应“a”,df2 对应“b”,依此类推。所以,最终的数据框是这样的:

Names Var    Val
a     d      4
a     e      5
b     e      5
b     f      6
c     f      6
c     g      7

有人可以帮我解决这个问题吗?

谢谢。

【问题讨论】:

  • 您说 df1 对应于“a”,但 R 应该如何知道这一点?
  • @Dason 实际上我正在遍历一个 data.frame,df(say) 并为数据帧的每一行调用一个函数。该函数依次返回每一行的数据帧。因此,mynames 是 df 的第一列,df1, df1, df3 是 df 的每一行(本例中为 3)的结果。由于整个代码很大,我在这里生成了一个示例案例。

标签: arrays r list dataframe


【解决方案1】:

这回答了这个特定的问题,但我不确定它对您的实际问题有多大帮助:

myList <- list(df1, df2, df3)
do.call(rbind, 
        lapply(seq_along(mynames), function(x) 
          cbind(Names = mynames[x], setNames(myList[[x]], 
                                             c("Var", "Val")))))
#   Names Var Val
# 1     a   d   4
# 2     a   e   5
# 3     b   e   5
# 4     b   f   6
# 5     c   f   6
# 6     c   g   7

在这里,我们创建了您的data.frames 列表,在我们的lapply 调用中,我们添加了新的“名称”列并重命名现有列,以便我们可以使用rbind 将它们全部放入在一起。

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多