如何将行从数据框复制到 R 中的矩阵?
How to copy a row from a data frame to a matrix in R?
在 Microsoft Open R 3.3 中,如何将数据库查询(returns 数据框)中的一行复制到矩阵的一行中?我知道我可以逐个元素地进行,但我应该能够一次复制一行。不过我不能:
> m = matrix(0, nrow=2, ncol=3)
> dim(m)
[1] 2 3
> dim(m[1,])
NULL
> f = dbGetQuery("SELECT id, name, age FROM users")
> dim(f)
[1] 300 3
> dim(f[1,])
[1] 1 3
> m[1,] = f[1,]
> m[1,]
Error in m[1, ] : incorrect number of dimensions
> dim(m)
NULL
> m[1,] = f[1,]
Error in m[1, ] = f[1, ] :
incorrect number of subscripts on matrix
将 f 转换为 as.matrix(f) 没有帮助。
为什么 dim(m[1,]) "NULL" 而不是 "1 3"?
为什么m[1,] = f[1,]第一次破坏了m的数据结构(将dim(m)变为NULL),第二次才报错?
我怀疑这与以下事实有关:数据框行可以包含不同类型,而矩阵行不能。 frame的一列是字符数据,其他都是整数。
您应该能够在取消列出后分配值 f[1,]
,因为 f[1,]
returns 一个单行数据框,它是一个列表,m[1,]
returns 一个原子向量,这回答了问题 为什么 dim(m[1,]) "NULL" 而不是 "1 3"? 因为一维原子向量不具有维度属性。尝试将列表分配给原子向量会导致问题:
m = matrix(0, nrow=2, ncol=3)
f = data.frame(x = 1:3, y = 2:4, z = 3:5)
m
# [,1] [,2] [,3]
#[1,] 0 0 0
#[2,] 0 0 0
m[1,] = unlist(f[1,])
m
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 0 0 0
class(m[1,])
#[1] "numeric"
class(f[1,])
#[1] "data.frame"
在 Microsoft Open R 3.3 中,如何将数据库查询(returns 数据框)中的一行复制到矩阵的一行中?我知道我可以逐个元素地进行,但我应该能够一次复制一行。不过我不能:
> m = matrix(0, nrow=2, ncol=3)
> dim(m)
[1] 2 3
> dim(m[1,])
NULL
> f = dbGetQuery("SELECT id, name, age FROM users")
> dim(f)
[1] 300 3
> dim(f[1,])
[1] 1 3
> m[1,] = f[1,]
> m[1,]
Error in m[1, ] : incorrect number of dimensions
> dim(m)
NULL
> m[1,] = f[1,]
Error in m[1, ] = f[1, ] :
incorrect number of subscripts on matrix
将 f 转换为 as.matrix(f) 没有帮助。
为什么 dim(m[1,]) "NULL" 而不是 "1 3"?
为什么m[1,] = f[1,]第一次破坏了m的数据结构(将dim(m)变为NULL),第二次才报错?
我怀疑这与以下事实有关:数据框行可以包含不同类型,而矩阵行不能。 frame的一列是字符数据,其他都是整数。
您应该能够在取消列出后分配值 f[1,]
,因为 f[1,]
returns 一个单行数据框,它是一个列表,m[1,]
returns 一个原子向量,这回答了问题 为什么 dim(m[1,]) "NULL" 而不是 "1 3"? 因为一维原子向量不具有维度属性。尝试将列表分配给原子向量会导致问题:
m = matrix(0, nrow=2, ncol=3)
f = data.frame(x = 1:3, y = 2:4, z = 3:5)
m
# [,1] [,2] [,3]
#[1,] 0 0 0
#[2,] 0 0 0
m[1,] = unlist(f[1,])
m
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 0 0 0
class(m[1,])
#[1] "numeric"
class(f[1,])
#[1] "data.frame"