2014-01-28 5 views
0

rmongodb를 사용하여 R에서 mongodb 쿼리를 실행 중입니다. 이미 mongo.cursor 객체를 얻었고이 커서 값을 R 데이터 프레임으로 변환해야합니다. 그러나 내 값에는 빈 문자열과 원치 않는 긴 문자가 포함되어 있으므로이 빈 문자열과 긴 문자열을 NA로 변환해야 데이터 프레임으로 변환 할 수 있습니다. 다음은 내 코드입니다 rmongodb : mongo bson 값을 데이터 프레임으로 변환

library(rmongodb) 
mongo <- mongo.create(host="localhost") 
dbns <- mongo.get.database.collections(mongo, db="namedisambiguation") 
query <- '{ "name": { "$exists": true }, "username": { "$exists": true } }' 
fields <- '{ "username": 1, "name": 1, "location": 1}' 
cur <- mongo.find(mongo, dbns, query=query, fields=fields) 
username <- name <- location <- NULL 
while (mongo.cursor.next(cur)) { 
     value <- mongo.cursor.value(cur) 
     username <- rbind(username, mongo.bson.value(value, 'username')) 
     name <- rbind(name, mongo.bson.value(value, 'name')) 
     location <- rbind(location, mongo.bson.value(value, 'location')) 
     } 

data2 <- data.frame(username=username, name=name, location=location) 

출력 다음 내 위치 수익률

:

[9972,] "NA"           
[9973,] ""           
[9974,] ""           
[9975,] ""           
[9976,] ""           
[9977,] "Madrid"          
[9978,] ""           
[9979,] ""           
[9980,] "San Antonsdnndsjo\todurnv\tkckdn"        
[9981,] ""           
[9982,] ""           
[9983,] ""           
[9984,] ""           
[9985,] ""  

가 어떻게 같은이 빈 값과 긴 문자열을 변환 할 수 있습니다 "산 Antonsdnndsjo \ todurnv \ tkckdn"NA로? (당신이 rbind()를 사용하여 주장하는 경우)

maxlength <- 16 

location <- ifelse(length(mongo.bson.value(value, 'location')) == 0 | 
        length(mongo.bson.value(value, 'location')) > maxlength, 
       rbind(location, NA), 
       rbind(location, mongo.bson.value(value, 'location'))) 

이 일을 : 나는 당신의 질문 권리를 얻을 수 있지만,이 라인을 따라 뭔가 일을하지 않을 것인지 확실하지

+0

왜 루프 대신'mongo.cursor.to.data.frame (cursor, nullToNA = TRUE, ...)'를 사용하고 3 개의 독립적 인 하나의 열 data.frames에'rbind() '를 사용하지 않으시겠습니까? – vaettchen

답변