2017-03-12 3 views
0

희소 행렬에 긴 데이터 dataframe를 변환 :R - 다음과 같은 방법을 두 키와 데이터 열이 나는 큰 dataframe, 305K 행이

enter image description here

나는이 변환하려고 R에 다음 코드를 이용하여 스파 스 매트릭스 :

Error in sparseMatrix(i = RID, j = HID, x = VALUE, dimnames = list(levels(RID), : 
    NA's in (i,j) are not allowed 
In addition: Warning messages: 
1: In Ops.factor(i, !(m.i || i1)) : ‘+’ not meaningful for factors 
2: In Ops.factor(j, !(m.j || i1)) : ‘+’ not meaningful for factors 
012 다음 오류 메시지를 생산

#convert to factors 
data$RID = as.factor(data$RID) 
data$HID = as.factor(data$HID) 
data$VALUE = as.numeric(data$VALUE) 
str(data) 

#remove nas 
data = na.omit(data) 

#create sparse matrix 
X = with(data,sparseMatrix(i=RID, 
          j=HID, 
          x=VALUE, 
          dimnames=list(levels(RID), levels(HID)))) 

NAs를 제거 했으므로 오류 -NAS가 나타나는 이유를 모르겠습니다. 또한 요인 내에서 '+'에 대한 참조가 있지만 36k 요소를 모두 확인 했으므로 '+'가 없습니다.

해결책이 무엇인지 아는 사람이 있습니까?

는 당신이 문제를 다시 생성 할 수 있으므로 아래 데이터의 처음 20 행의 스냅 샷을 포함했다 :

"RID" "HID" "VALUE" 
"361838" "620631" 76.55 
"361838" "620671" 82.61 
"361838" "620787" 57.73 
"361838" "621146" 58.65 
"361838" "637825" 64.15 
"361838" "637859" 82.79 
"361838" "641254" 50.38 
"361838" "642105" 72.88 
"361838" "646469" 45.79 
"361838" "648400" 82.06 
"395855" "301340" -5.12 
"395855" "649304" 41.88 
"395855" "650324" -30.83 
"395855" "657458" 46.47 
"395855" "658028" -0.53 
"395855" "659504" 28.84 
"395855" "660506" 29.03 
"395855" "660519" 14.16 
"395855" "660521" -38.17 
"395855" "660547" 35.45 

내가 요소를 볼 때, 나는 다음과 같은 얻을 수 있지만 :

> str(data) 
'data.frame': 20 obs. of 3 variables: 
$ RID : Factor w/ 30608 levels "361838","395855",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ HID : Factor w/ 37399 levels "2018","7990",..: 11604 11624 11709 11740 14031 14049 15086 15457 16821 17270 ... 
$ VALUE: num 76.5 82.6 57.7 58.6 64.2 ... 
+0

'str (data)'와'str (X)'리포트를 보여줄 수 있습니까? 예를 들어 데이터 샘플을 제공하는 경우 'dput (head (data, 20))'를 사용하면 문제를 재현 할 수 있으므로 도움이 될 것입니다. 한 가지 가능성은 'RID'와 'HID'가 요인이 아니라는 것입니다. –

+0

의견을 게시하지 말고 추가 정보를 포함하도록 질문을 편집하십시오. 열을 요인으로 변환하여 데이터를 업데이트 한 경우 새로운 오류를 반영하여 질문을 수정하십시오. 또한 NAs를 어떻게 제거하는지 보여주는 것도 유용 할 것입니다. –

+0

저는 첫 번째 제안에 따라 RID와 HID를 요인으로 변환하고 모든 NA를 제거했습니다. 현재 문제와 오류를 표시하기 위해 질문을 다시 편집했습니다. – Tammboy

답변

0

sparseMatrix에 전화에서 숫자에 RIDHID 변환 시도 :

X <- with(data, sparseMatrix(i=as.numeric(RID), 
         j=as.numeric(HID), 
         x=as.numeric(VALUE), 
         dimnames=list(levels(RID), levels(HID)))) 

RIDHIDsparseMatrix에 대한 호출 다음에 숫자, 첫 번째 요소로 변환 될 필요가있는 이유는 그렇게 sparseMatrix이 행/열을위한 지표로 RIDHID의 값을 가질 것이라는 점이다. 즉,

test <- data.frame(x = 101:105, y = 201:205, v = 1:25) 
dim(with(test, sparseMatrix(i = x, j = y, x = v))) 
# [1] 105 205 

은 우리가 키로 xy 치료, 생각했던 불과 5 × 5 매트릭스 무엇에도 불구하고, 당신에게 105 X 205 매트릭스를 제공합니다.