将data.table的行转换为向量

时间:2015-10-29 20:22:55

标签: r data.table

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

unlist(dt[row_num])

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

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

似乎应该有更好的选择。

3 个答案:

答案 0 :(得分:14)

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

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

IMO最好首先使用data.table - 操作,而不是将完整的数据表转换为矩阵。简单地说,性能更好(特别是在非常大的 data.tables 上)。例如:

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

答案 1 :(得分:10)

将行提取为向量的问题是向量是同构的,而数据帧或数据表的行则不是。

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

> 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 :(得分:0)

通过指定行以及要提取的列来使用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"