Цикл по столбцам в data.table R - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь l oop над столбцами в пакете data.table в R. У меня были проблемы с попыткой получить для l oop точный ввод столбца, когда я поднабору определяемых данных.

Цель моей задачи - получить количество строк для каждого поднабора данных, когда выполняется условие столбца "== 1".

Вот мой код:


data <- data.table(va=c(1,0,1), vb=c(1,0,0), vc=c(1,1,1))


names <- c("va", "vc")

for (col in names) {
    print(nrow(data[col == 1,]))
    print(col)
}

Вот вывод, который я получаю

[1] 0
[1] "va"
[1] 0
[1] "vc"

Есть ли что-то, чего мне не хватает или лучший способ сделать это?

1 Ответ

0 голосов
/ 17 января 2020

Вы можете использовать colSums, что намного проще и быстрее, чем зацикливание.

dt <- data.table(va=c(1,0,1), vb=c(1,0,0), vc=c(1,1,1))
col.names <- c("va", "vc")
dt[, colSums(.SD==1), .SDcols = col.names]
# va vc 
# 2  3 

Примечание: Я изменил имена ваших объектов на dt и col.names, потому что не рекомендуется использовать базовые функции в качестве имен.

Если вы действительно хотите использовать for l oop (я не рекомендую его, но в образовательных целях ...) вы можете исправить это, используя get, чтобы использовать значения столбца, а не столбец имя сам

for (col in col.names) {
  dt[get(col) == 1, print(.N)]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...