Я хочу сделать следующее. Я вычисляю остаток от общего количества строк в наборе данных, деленный на 20, и на основе остатка (0,1,2, ... 19) Я назначаю значение x1, x2, x3 и т. Д. Переменной, называемой blf. Например, если остаток n-й строки & 20 равен 0, тогда blf = 0,8, если остаток n-й строки & 20 равен 1, тогда blf = 0,7, если остаток n-й строки и 20 равен 2 или 3, тогда blf = 0,6 и так далее. Когда я делаю это в R (Мой код ниже и образец набора данных можно найти здесь (как RDATA и CSV): http://goo.gl/qgbeIJ) я получаю следующее сообщение об ошибке:Назначить значение на основе остатка строки
Error in ifelse(sampledat[1:nrow(sampledat)%%20 == 0], 0.8, blf) : (list) object cannot be coerced to type 'logical'
sampledat$blf <- 0.1
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==0],0.8,blf))
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==1],0.7,blf))
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==2] | sampledat[1:nrow(sampledat)%%20==3] ,0.6,blf))
Одно из возможных решений для хранения остатков в виде отдельной переменной с именем осталось, а затем, основываясь на значении вектора, выполните мои операции ifelse, но мне интересно, есть ли способ сделать это за один шаг.
sampledat$remain <- (1:nrow(sampledat))%%20
sampledat$blf <- 0.1
sampledat$blf <- with(sampledat, ifelse(remain==0,0.8,blf))
sampledat$blf <- with(sampledat, ifelse(remain==1,0.7,blf))
sampledat$blf <- with(sampledat, ifelse(remain==2 | remain==3 ,0.6,blf))
Любые идеи были бы оценены.
ТИА, Кришнан
По крайней мере, если 'stay' никогда не превышает 3, вставьте свое' if-else' и назначьте все случаи, которые не равны 0 или 1, к окончательному значению. Я также не думаю, что вам нужно 'с' - просто что-то вроде' sampledat $ blf <- 0.6 + 0.1 * (sampledat $ оставаться == 1) + 0.2 * (sampledat $ оставаться == 0) ' –
Что произойдет, если остаток больше 3? –
Тот же процесс продолжается с разными значениями, назначенными blf на основе остатка до 19, и он повторяется для всех записей в таблице данных. Для краткости не было всего остального = 19. – Krishnan