rmongodb: преобразование значений mongo bson в фрейм данных

Я запускаю запрос mongodb в R, используя rmongodb. Я уже получил объект mongo.cursor, и мне нужно преобразовать эти значения курсора в R dataframe. Однако мои значения содержат некоторые пустые строки и нежелательные длинные символы, поэтому мне нужно преобразовать эти пустые строки и длинные строки в NA, чтобы их можно было преобразовать в фрейм данных. Ниже мой код

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,] ""     

Как я могу преобразовать эти пустые значения и длинные строки, такие как "San Antonsdnndsjo\todurnv\tkckdn" в NA?


person Raj Subit    schedule 28.01.2014    source источник
comment
Почему бы вам не использовать mongo.cursor.to.data.frame(cursor, nullToNA = TRUE, ...) вместо цикла и rbind() для трех независимых фреймов данных по одному столбцу?   -  person vaettchen    schedule 28.01.2014


Ответы (1)


Не уверен, правильно ли я понял ваш вопрос, но разве что-то в этом роде не сработает:

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' ) ) )

выполнить задание (если вы настаиваете на использовании rbind())?

person vaettchen    schedule 28.01.2014