2016-10-23 10 views
-1

Microsoft Open R 3.3에서 행렬에 데이터베이스 쿼리의 행을 복사 (데이터 프레임 반환) 할 수 있습니까? 요소별로 할 수 있다는 것을 알고 있지만 한 번에 한 행을 복사 할 수 있어야합니다. 그래도 할 수 없습니다 :데이터 프레임의 행을 R의 행렬로 복사하는 방법은 무엇입니까?

(F)를 as.matrix하는 F 변환
> 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 

도움이되지 않습니다.

"1 3"대신 dim (m [1,])이 "NULL"인 이유는 무엇입니까?

왜 m [1,] = f [1,]은 m의 데이터 구조를 처음으로 망가 뜨 렸지만 (dim (m)을 NULL로 변경), 두 번째로 오류를보고하지 않습니다.

데이터 프레임 행에 다른 유형이 포함될 수 있지만 행렬 행에는 사용할 수 없다고 생각됩니다. 프레임의 한 열은 문자 데이터이고 다른 열은 정수입니다.

+1

m [1,]은 숫자 벡터입니다. 차원을 유지하려면 '?'[ ''를 읽고'drop '인수를 사용하십시오. 구조는 "난파되지 않았다". 당신은 단순히 출력을 오해하고 있습니다. –

+0

구조가 내부적으로 손실 되었기 때문에 구조가 엉망이라고 말합니다. dim (m)은 그 할당 이전에는 아니지만 NULL을 반환합니다. 해당 정보를 질문에 추가하려면 지금 편집하십시오. –

+0

'f'가 지금까지 제공되는 증거로부터 나온 데이터 프레임이라는 것을 우리는 실제로 알지 못합니다. 'dput (f [1,]')의 결과를 제공해야한다. –

답변

2

f[1,]가리스트 한 행의 데이터 프레임을 리턴하기 때문에, f[1,]을 목록에서 제외 후의 값을 할당 할 수 있어야는 m[1,] 원자 벡터를 반환하고 희미 이유 질문 대답 (m의 [1]) "1 3"대신 "NULL"?입니다. 1 차원 원자 벡터에는 차원 특성이 없기 때문입니다. 원자 벡터에 목록을 할당하려고하면 다음과 같은 문제가 발생합니다.

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" 
관련 문제