2013-12-15 3 views
0

Q1:R: data.table: поиск по нескольким столбцам И настройка типа данных

Возможно ли выполнить поиск по двум различным столбцам в таблице данных. У меня есть 2 миллиона нечетных данных строки, и я хочу иметь возможность поиска по любому из двух столбцов. У одного есть имена, а у другого есть целые числа.

Пример:

x <- data.table(foo=letters,bar=1:length(letters)) 
x 

want to do 
x['c'] : searching on foo column 
as well as 
x[2] : searching on bar column 

Q2: Можно ли изменить типы данных по умолчанию в таблице данных. Я читаю в матрице с символьными и целыми столбцами, но все считывается как символ.

Спасибо! -Abhi

ответ

3

Чтобы ответить на ваш Q2 во-первых, data.table является data.frame, оба из которых являются Внутренне list. Поэтому каждый столбец data.table (или data.frame) может быть другого класса. Но вы не можете сделать это с помощью matrix. Вы можете использовать := изменить класс (по ссылке - нет ненужной копии которых не делается), например, «бар» здесь:

x[, bar := as.integer(as.character(bar))] 

Для Q1, если вы хотите использовать быстрое подмножество (используя бинарный поиск) функция data.table, то вы должны установить ключ, используя функцию setkey.

setkey(x, foo) 

позволяет быстро-подмножество в 'х' один, как: x['a'] (или x[J('a')]). Аналогично, установка ключа на «бар» позволяет вам быстро подмножество в этом столбце.

Если установить ключ на обоих «Foo» и «бар», то вы можете предоставить значения для обоих, как так:

setkey(x) # or alternatively setkey(x, foo, bar) 
x[J('c', 3)] 

Однако, это будет подмножество тех, где х == «с» и y == 3. В настоящее время я не думаю, что есть способ сделать операцию | с помощью быстрого подмножества напрямую. В этом случае вам придется прибегнуть к методу векторного сканирования.

Надеюсь, это ваш вопрос. Не уверен.

1

Ваша матрица уже является символом. Матрицы содержат только один тип данных. Вы можете попробовать X['c'] и X[J(2)]. Вы можете изменить типы данных, как X[,col := as.character(col)]

Смежные вопросы