从列表创建数据框架

时间:2016-10-05 07:11:09

标签: r list dataframe

我有3个列表,我想将它们组合成一个数据框,其中每列都是列表的元素。

有3个列表(ld是值为112的nummeric)

ld <- 112

# 3 lists
or <- as.list(rep(0, 8))
thetax <- lapply(0:7, function(x) ld * cos (x * pi / 4))
thetay <- lapply(0:7, function(x) ld * sin (x * pi / 4))

这是我尝试将它们组合成data.frame

 df3 <- data.frame(or, thetax, thetay)

我认为这应该是非常简单和基本但我无法做到。

我一直在寻找几个小时的答案并且一直在尝试不同的事情,但到目前为止似乎没有任何工作,我无法执行它。

3 个答案:

答案 0 :(得分:4)

您无法使用列表列创建Map msgMap=new HashMap(); msgMap.put("partnerId", partnerId); Message msg=MessageBuilder.withPayload(msgMap).build(); List<QueueConfiguration> qc= partnerService.findConfig(msg); 这一事实是一个长期的烦恼。按优先顺序递减,您可以

  • 请改用data.frame包中的data_frame

    tibble
  • 按照David Arenburg的建议,创建一个包含维度的列表,然后将其转换为数据框。

    tibble::data_frame(or, thetax, thetay)
    
  • 创建数据框,然后添加列表列。

    data.frame(cbind(or, thetax, thetay))
    
  • 使用df3 <- data.frame(1:8)[,FALSE] df3$or <- or df3$or <- thetax df3$or <- thetay 制作数据框。

    structure

答案 1 :(得分:2)

我可能会遗漏一些东西,但我认为这可以作为向量而不是列表。这对你有用吗,还是我偏离目标?

x <- 0:7
ld <- 112
or <- rep(0, 8)
thetax <- ld * cos (x * pi / 4)
thetay <- ld * sin (x * pi / 4)
df3 <- data.frame( or, thetax, thetay )

答案 2 :(得分:1)

我意识到你已经接受了答案,但是没有简单的方法可以从列表中创建data.frame。 使用您的示例的直接方式是:

ld <- 112
or <- as.list(rep(0, 8))
thetax <- lapply(0:7, function(x) ld * cos (x * pi / 4))
thetay <- lapply(0:7, function(x) ld * sin (x * pi / 4))

df <- as.data.frame(do.call("cbind",list(or, thetax, thetay)))
df

  V1            V2           V3
1  0           112            0
2  0      79.19596     79.19596
3  0  6.858022e-15          112
4  0     -79.19596     79.19596
5  0          -112 1.371604e-14
6  0     -79.19596    -79.19596
7  0 -2.057407e-14         -112
8  0      79.19596    -79.19596