【问题标题】:Converting List of Vectors to Data Frame in R在R中将向量列表转换为数据框
【发布时间】:2017-12-06 19:28:05
【问题描述】:

我正在尝试将向量列表转换为数据框,其中有一个公司名称列和 MPE 列。我的列表是通过为每个公司运行以下代码生成的:

MPE[[2]] <- c("Google", abs(((forecasted - goog[nrow(goog),]$close) 
/ goog[nrow(goog),]$close)*100))

现在,我无法将其放入适当的数据框以进行进一步操作。最简单的方法是什么?

这是一个向量示例列表,我希望将其处理到一个数据框中,其中一列是公司名称,第二列是数字。

test <- list(c("Google", 2))
test[[2]] <- c("Microsoft", 3)
test[[3]] <- c("Apple", 4)

【问题讨论】:

  • 如果你能提供一个可重现的例子,回答你的问题会更容易。在这种情况下,代码会生成一个向量列表,看起来像您想要折叠到数据框中的那个。
  • 由于c 创建的向量只能包含一种类型,因此您将数字强制转换为字符串。您可以像这样解决问题:test_df &lt;- as.data.frame(do.call(rbind, test), stringsAsFactors = FALSE); test_df[] &lt;- lapply(test_df, type.convert, as.is = TRUE)

标签: r dataframe data-manipulation


【解决方案1】:

您可以将unlistmatrix 一起使用,然后变成dataframe。我认为使用rbind 减少可能需要很长时间才能使用大型数据框。

df <- data.frame(matrix(unlist(test), nrow=length(test), byrow=T))
colnames(df) <- c("Company", "MPE")

【讨论】:

    【解决方案2】:

    我实际上能够通过以下方式实现我想要的:

    MPE_df <- data.frame(Reduce(rbind ,MPE))
    colnames(MPE_df) <- c("Company", "MPE")
    MPE_df
    

    【讨论】:

    • 旁注:do.call(rbind, MPE) 比使用 Reduce 快很多
    猜你喜欢
    • 2021-01-18
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多