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


Я знаю, что есть еще подобные вопросы. Однако, я не могу сделать это. У меня очень большие данные.таблица с около 800.000 строк. Каждая строка содержит некоторые конкретные данные, то некоторые требуют данные за 2 года (из столбца 12 и далее), и в последней колонке-это количество. Это число определяет, сколько столбцов спрос должен быть заменен.

Пример с одной строкой:

ITEM COUNTRY Q1 Q2 Q3 Q4 ---- Q24 NUMBER 1          1  0  0  0  0 ----   2      2
x

Если это называется вектором к примеру, я бы сделал это:

x[2:(2+x$NUMBER-1)] <- NA 

Теперь я хочу сделать это для всех строк. Цикл for-это слишком медленно. Так что я думал применить.

fun_NA <- function(x){ #x is then a row of the data.table#still use that with x[,] as x is still a data.table and not a vector     if(x[,60]>0){        x[,12:(12+as.numeric(x[,60])-1)] <- NA      }}dt = apply(dt, 1, fun_NA)
dt

где мои данные.стол, который имеет 60 столбцов. Первое значение спроса начинается в колонке 12. Он не работает.. теперь он выдает ошибку "Ошибка в X[,60] : неверное число размерностей", но я попробовал другие варианты и получили другие ошибки.

Причина, почему я хочу сделать это: числа, обозначающие месяц (после первого месяца моего набора данных), если товар удалось продать, поэтому в те месяцы, когда спрос был не 0, а просто не существовало. Мне нужно, чтобы это было на, как 0 будет вызывать неправильные расчеты позже.

Редактирования:удалена запятая так это новый код,

fun_NA <- function(x){ #x is then a row of the data.table        if(x[60]>0){            x[12:(12+as.numeric(x[60])-1)] <- NA            }    }dt = apply(dt, 1, fun_NA)

Однако, это возвращает большой список с нулем и на элементы..

Редактировать: глава из данных таблицы следующим образом: (действия dput)

structure(list(ITEM = c(1, 1, 2, 2, 2, 2), COUNTRY = c(1, 2, 3, 4, 5, 2), DATE = c("2015-02-02", "2015-02-02", "2014-09-27", "2014-09-27", "2014-09-27", "2014-09-27"), q_1 = c(0, 0, 2, 0, 0, 133), q_2 = c(0, 0, 24, 0, 9, 119), q_3 = c(0, 0, 15, 0, 13, 121), q_4 = c(0, 0, 7, 0, 2, 51), q_5 = c(0, 0, 12, 0, 6, 59),     q_6 = c(0, 0, 3, 0, 0, 36), q_7 = c(0, 0, 6, 0, 6, 41), q_8 = c(0,     0, 19, 0, 4, 42), q_9 = c(0, 0, 3, 0, 5, 48), q_10 = c(0,     0, 5, 0, 11, 49), q_11 = c(0, 0, 6, 0, 1, 42), q_12 = c(0,     0, 0, 0, 8, 70), q_13 = c(0, 0, 1, 0, 19, 81), q_14 = c(0,     0, 5, 0, 98, 86), q_15 = c(0, 0, 12, 0, 10, 152), q_16 = c(0,     0, 7, 0, 8, 95), q_17 = c(0, 0, 30, 0, 5, 62), q_18 = c(0,     0, 6, 0, 10, 47), q_19 = c(0, 0, 7, 0, 1, 35), q_20 = c(2,     0, 7, 0, 0, 47), q_21 = c(0, 2, 16, 5, 4, 70), q_22 = c(0,     0, 7, 0, 7, 46), q_23 = c(0, 0, 8, 0, 79, 20), q_24 = c(0,     0, 5, 0, 26, 45), NUMBER = c(13, 13, 8, 8, 8, 8)), .Names = c("ITEM", "COUNTRY", "DATE", "q_1", "q_2", "q_3", "q_4", "q_5", "q_6", "q_7", "q_8", "q_9", "q_10", "q_11", "q_12", "q_13", "q_14", "q_15", "q_16", "q_17", "q_18", "q_19", "q_20", "q_21", "q_22", "q_23", "q_24", "NUMBER"), class = c("data.table", "data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x0000000004490788>)