我想将data.table
行转换为向量。这对我有用:
unlist(dt[row_num])
但是有更原生的解决方案吗?我也不喜欢上面保留名称的时候我真的想要一个纯数字向量,然后导致:
as.numeric(unlist(dt[row_num]))
似乎应该有更好的选择。
答案 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"