【问题标题】:matrix inside data.frame in R or other nested structureR或其他嵌套结构中data.frame内的矩阵
【发布时间】:2017-02-18 00:33:17
【问题描述】:

我需要在 R 中为每个观察构建一个包含matrix(或data.frame)的数据结构。理想情况下,它将是matrix 内的data.frame。到目前为止,我只能想到嵌套列表,来实现它,但是我害怕性能不佳。

示例

例如对于data.frame元素

df <- data.frame(start=c("A", "B", "C"), end=c("A", "B", "C"))

我想在每个单元格中添加一个包含矩阵的列(由距离函数产生)。例如元素 start=="A", end=="B" 它可以是矩阵(或 data.frame)

haversineStart haversineEnd tripLengthDiff startCountry endCountry truckDiff
160.5408     308.1947        198.745            1          1         1
152.4168     308.1947         20.710            1          1         1
273.7599    2228.3508       2903.212            0          1         1

理论上,它只是某种 3d 数据结构。在 Python 中,它将是包含 NumPy-array 的列表列表。在 R 中可能有这样的事情吗?

背景

我想使用自定义距离函数执行 knn,我需要在执行 knn 之前标准化距离

【问题讨论】:

    标签: r multidimensional-array dataframe distance knn


    【解决方案1】:

    如果你已经有嵌套列表:

    d <- list(
        a = list(matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2)),
        b = list(matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2))
    )
    

    您可以轻松地将它转换为 data.frame,因为 data.frame 仍然是列表:

    class(d) <- 'data.frame'
    colnames(d) <- c('A', 'B')
    rownames(d) <- c('A', 'B', 'C')
    
    d['A', 'B']
    
    # [[1]]
    #            [,1]       [,2]
    # [1,] -0.6326935 -1.1181986
    # [2,] -1.3066515  0.6672159
    

    【讨论】:

      【解决方案2】:

      只需将矩阵列表分配给 data.frame 中的新列。例如,假设问题中的df

      m <- matrix(c(1, 12, 3, 14), 2)
      df$mat <- list(m, 2*m, 3*m) # test list
      

      所以

      > df$mat[[1]]
           [,1] [,2]
      [1,]    1    3
      [2,]   12   14
      
      > df[[1, "mat"]]
           [,1] [,2]
      [1,]    1    3
      [2,]   12   14
      
      > transform(df, det = sapply(mat, det))
        start end          mat  det
      1     A   A 1, 12, 3, 14  -22
      2     B   B 2, 24, 6, 28  -88
      3     C   C 3, 36, 9, 42 -198
      

      【讨论】:

        猜你喜欢
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-29
        • 2017-12-22
        • 1970-01-01
        相关资源
        最近更新 更多