2013-07-04 3 views
-1

Я имею действительно anoying проблемы в моем коде:не в состоянии использовать части data.table

library(data.table) 
a<-(letters=c(1:20)) 
b<-rnorm(1:20) 
c<-rnorm(1:20) 
d<-rnorm(1:20) 
final<-data.frame(a,b,c,d) 

e<-data.table(final) 
g<-e[, lapply(.SD, sum), by =c("a"), .SDcols = 2:4] #calculates a summary of columns for every "by" statement in my large dataframe 
h<-g[,2:4] 

Вектора ч должна включать колонку 2-4 г, но она содержит одно значение, говоря 2: 4. Тем не менее, некоторые строки в моем скрипте показывают выбор некоторых столбцов с помощью df [, columns]. Все идеи о том, как решить эту проблему, будут очень благодарны.

+2

Вы читаете таблицу данных.table FAQ? Вместо этого попробуйте 'g [, 2: 4, with = FALSE]'. –

ответ

3

Самый первый вопрос в Data Table FAQ описывает эту проблему: (о том, почему DT[,5] возвращается 5)

Because, by default, unlike a data.frame, the 2nd argument is an 
expression which is evaluated within the scope of DT. 5 evaluates to 5. 

И продолжается предложить обходной путь:

Having said this, there are some circumstances where referring to a column by 
number is ok, such as a sequence of columns. In these situations just do: 
DT[,5:10,with=FALSE] 

или

DT[,c(1,4,10),with=FALSE] 
Смежные вопросы