【问题标题】:Converting the row of a data.table to a vector将 data.table 的行转换为向量
【发布时间】:2016-01-30 03:56:05
【问题描述】:

我想将data.table 行转换为向量。这对我有用:

unlist(dt[row_num])

但是有没有更原生的解决方案?当我真的想要一个纯数字向量时,我也不喜欢上面保留的名称,这会导致:

as.numeric(unlist(dt[row_num]))

似乎应该有更好的选择。

【问题讨论】:

  • 在 R 中将 list 转换为 vector 的原生解决方案;还要注意unlistuse.names 参数
  • 您也可以使用unname 删除名称。
  • 我同意 BondedDust 在这里的第一句话:stackoverflow.com/a/8595099/1191259 “技术上列出了 are 向量,尽管很少有人会使用这个术语。”从这个意义上说,你可以停在c(dt[row_num])

标签: r data.table


【解决方案1】:

将行提取为向量的问题在于向量是同质的,而数据框或数据表的行则不是。

但是,您可以将数据转换为矩阵,然后提取行:

> x <- iris[1:10,1:4]
> as.matrix(x)[1,]
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         5.1          3.5          1.4          0.2 

【讨论】:

    【解决方案2】:

    好的,现在我知道你想要一行:

    as.matrix(dt[row_num])[1,]
    

    IMO 最好先使用data.table-操作,而不是将完整的数据表转换为矩阵。只是性能更好(尤其是在非常大的 data.tables 上)。示例:

    library("data.table")
    Iris <- data.table(iris[-5])
    as.matrix(Iris[42])[1,]
    

    【讨论】:

      【解决方案3】:

      通过指定行以及要提取的列来使用melt.data.table()(对整行使用measure.vars = 1:ncol(iris.dt))。通过在末尾添加 [, value] 来选择值。最好指定所有相同类型的列,否则所有值都将转换为字符(带有警告)。

      library("data.table")
      iris.dt <- data.table(iris)
      
      # One line solution:
      row1 <- melt.data.table(iris.dt[1], measure.vars = 1:4)[, value]
      
      # In steps:
      iris.row1 <- iris.dt[1]
      #    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
      # 1:          5.1         3.5          1.4         0.2  setosa
      
      iris.melted <- melt.data.table(iris.row1, measure.vars = 1:4)
      # variable  value
      # 1: Sepal.Length    5.1
      # 2:  Sepal.Width    3.5
      # 3: Petal.Length    1.4
      # 4:  Petal.Width    0.2
      
      row1 <- iris.melted[, value]
      # [1] "5.1"    "3.5"    "1.4"    "0.2"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 2016-04-01
        • 1970-01-01
        相关资源
        最近更新 更多