2015-07-09 4 views
-2

У меня есть data.table в R с 200 столбцами с целыми значениями.Выбор столбцов на основе определенных условий в таблице данных. R

Один из столбцов называется группой и имеет 100 различных возможных значений.

Так что, когда я Подмножество с помощью: subDT<-DT[group==N], например, и если я делаю, sum(subDT$columnX), может быть, значение суммы будет 0.

Так что я хочу сделать, это отобразить subDT, но только столбцы, где sum(subDT$columnN)!=0, что-то вроде subDT[group==0,.(columns where sum(column)>0)], сохраняя, конечно, имена столбцов.


EDIT

Пример использования mtcars данных будет:

DT<-as.data.table(mtcars) 

Давайте предположим, что мы хотим, чтобы подмножество mtcars и получить строки, где карбюратор является 1, но отображения столбцов, только если сумма подмножества меньше 10:

DT[carb == 1, (sapply(DT[carb == 1],sum) < 10), with = FALSE] 

В этом случае столбцы, которые будут отображаться только против, я и карбюратор, так как сумма этих столбцов меньше, чем 10

+3

Просьба представить [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) ваших данных. Это действительно 'data.table' или' data.frame'? – Molx

+0

@Molx синтаксис явно является «data.table» one –

+0

. Вы действительно должны представить воспроизводимый пример, потому что, поскольку он стоит сейчас, эти вопросы никому не полезны и должны быть закрыты. IMO –

ответ

1

Предполагая, что сумма берется после фильтра:

DT[group == N, !(sapply(DT[group == N],sum) == 0), with = FALSE]

Может быть быстрее SetKey:

setkey(DT,group) 
DT[N, !(sapply(DT[N],sum) == 0), with = FALSE] 
Смежные вопросы