简体   繁体   中英

Error using seq in data.table r

I have a data.table like this:

DT <- data.table(year = rep(2009,24), id = rep(123,24), cant = c(rep(29,4),rep(30,12),rep(31,8)),
             monthr = c(seq(1,4,1),seq(1,12,1),seq(1,8,1)), count = c(rep(4,4),rep(12,12),rep(8,8)))

I want to compute a new var called pond using seq as follows:

DT[ , pond := ifelse(test = count < 12 && year == 2009,
                             yes = seq(12 - count + 1, 12, 1),
                             no = seq_along(cant)),by = c("id","cant")]

But I get the following error:

#Error in seq.default(12 - count + 1, 12, 1) : 'from' must be of length 1

I suppose that the error comes from the use name of vars in seq , but I don't known how to solve it. What can I do?

Based on the OP's example, 'count' is unique for each 'id', 'cant' group, so after grouping by 'id' and 'cant', specify the logical condition for 'year' in i , if the first value of 'count' is less than 12, get the sequence as showed in the OP's post or else return the sequence of rows, assign ( := ) the output to 'pond'

DT[year == 2009, pond := if(count[1] < 12) as.integer(seq(12-count[1] +1, 12, 1))
                    else seq_len(.N), .(id, cant)]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM