【问题标题】:Add a vector as a single observation to a data.frame将向量作为单个观察值添加到 data.frame
【发布时间】:2012-02-09 20:31:32
【问题描述】:

我正在尝试在 data.frame 中保存许多光谱测量值。每次测量都有许多属性以及两个光谱数据通道,每个通道有 2048 个数据点。我想让每个通道成为数据框中的一个数据点。

类似这样的:

  timestamp           type integration channel1 channel2
1 2011-10-02 02:00:01 D    2000        (spec)   (spec)
2 2011-10-02 02:00:07 D    2000        (spec)   (spec)

其中每个(spec) 是一个包含 2048 个值的向量。我根本无法让它工作,我现在向你们寻求帮助。

提前致谢。

【问题讨论】:

  • 这不是数据框的用途。开始使用列表代替(数据框不过是一种特殊类型的列表)
  • @Bjørn Madsen 您的标题有点令人困惑,因为您不是将向量添加为每个变量,而是将向量添加为变量/列的每个观察值/单元格
  • @JorisMeys 确实感觉有点骇人听闻。猜猜这是一个列表列表。
  • @TylerRinker 将其编辑为更好的内容(希望如此)。
  • @BjørnMadsen 不应该觉得 hackish。清单是为那种东西制作的;-)。

标签: r dataframe


【解决方案1】:

您可以将矩阵添加为 data.frame 字段之一,因此您必须将所有向量作为矩阵行。

DF <- data.frame(timestamp=1:3, type=LETTERS[1:3], integration=rep(2000, 3))
DF$channel1 <- matrix(rnorm(3*2048), nrow=3)
DF$channel2 <- matrix(rnorm(3*2048), nrow=3)
ncol(DF)# == 5

【讨论】:

    【解决方案2】:

    我认为你想要的是可行的,但我可能没有完全理解你的问题。不过请注意 Joris 的建议,因为这可能是存储数据的更好方法。您可以通过将 2048 个值的向量存储在列表中来完成您想要的操作,然后将其作为列添加到数据框中。使用 read.table 不容易导入您的表(无论如何对我来说),所以我编写了自己的数据框和示例。

    DF <- data.frame(timestamp=1:3, type=LETTERS[1:3], integration=rep(2000, 3))
    DF$channel1 <- list(c(rnorm(2048)), c(rnorm(2048)), c(rnorm(2048)))
    DF$channel2 <- list(c(rnorm(2048)), c(rnorm(2048)), c(rnorm(2048)))
    

    【讨论】:

    • 谢谢,这是我一直在寻找的,但我可能会以“正确”的方式进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2011-12-10
    相关资源
    最近更新 更多