2013-11-29 1 views
4

Как образец подвыборки больших данных.table (data.table package)? Есть ли более элегантный способ выполнить следующуюПодмножество данных.таблица с условием

DT<- data.table(cbind(site = rep(letters[1:2], 1000), value = runif(2000))) 
DT[site=="a"][sample(1:nrow(DT[site=="a"]), 100)] 

Guess есть простое решение, но не может выбрать правильную формулировку для поиска.

UPDATE: В более общем плане, как я могу получить доступ к номеру строки в i аргумента data.table без создания временной колонки для номера строки?

+1

Это ненужно 'cbind' в ваша команда 'data.table (.)'. – Arun

ответ

4

Одна из самых больших преимуществ использования data.table является то, что вы можете установить ключ для ваших данных.
Использование key и затем .I (встроенный vairable см ?data.table для получения дополнительной информации.), Вы можете использовать:

setkey(DT, site) 
DT[DT["a", sample(.I, 100)]] 

Что касается Вашего второго вопроса "how can I access a row number in data.table's i argument"

# Just use the number directly: 
DT[17] 
+0

спасибо! просто для уточнения, как я могу пробовать каждое четное число с помощью аргумента i? – RInatM

+1

+1. С тем, что вы делаете, вам придется подмножество из внутреннего 'DT [..]', то есть: DT [DT ["a", sample (.I, 100)] $ V1] '. В качестве альтернативы вы можете использовать аргумент 'which' в' [.data.table' следующим образом: 'DT [sample (DT [" a ", which = TRUE])]' – Arun

3

Используя which, вы можете найти номера строк. Вместо выборки из 1:nrow(...) вы можете просто выбрать из всех строк требуемое свойство. В вашем примере, вы можете использовать следующее:

DT[sample(which(site=="a"), 100)]