Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将data.table的行转换为向量_R_Data.table - Fatal编程技术网

R 将data.table的行转换为向量

R 将data.table的行转换为向量,r,data.table,R,Data.table,我想将数据.表行转换为向量。以下是对我有效的方法: unlist(dt[row_num]) 但是有没有一个更为自然的解决方案?我也不喜欢上面保留的名称,当我真正想要一个纯数字向量时,这会导致: as.numeric(unlist(dt[row_num])) 似乎应该有更好的选择。将行提取为向量的问题是,向量是同质的,而数据帧或数据表的行不是同质的 但是,您可以将数据转换为矩阵,然后提取行: > x <- iris[1:10,1:4] > as.matrix(x)[1,] S

我想将
数据.表
行转换为向量。以下是对我有效的方法:

unlist(dt[row_num])
但是有没有一个更为自然的解决方案?我也不喜欢上面保留的名称,当我真正想要一个纯数字向量时,这会导致:

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

似乎应该有更好的选择。

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

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

> 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 
>x作为矩阵(x)[1,]
萼片。长萼片。宽花瓣。长花瓣。宽
5.1          3.5          1.4          0.2 

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

as.matrix(dt[row_num])[1,]
在我看来,最好先使用
data.table
-操作,而不要将完整的datatable转换为矩阵。简单地说,性能更好(特别是在非常大的data.tables上)。例如:

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

库(“data.table”)

iris.dt,它是在R中将
列表
转换为
向量
的本机解决方案;还要注意
unlist
use.names
参数,您也可以使用
unname
删除名称。我同意BondedDust在这里的第一句话:“从技术上讲,列表是向量,尽管很少会使用该术语。”从这个意义上讲,您可以停在
c(dt[row\u num])
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"