r - 'j' doesn't evaluate to the same number of columns for each group issue in data.table -
i running error when using data.table. error message is:
error in
[.data.table(x.out, , if (all(v3 > 25)) c(as.character(v1[1]), :jdoesn't evaluate same number of columns each group
i'd know how around error.
my data looks (see @ bottom of post reproducible form of data using dput):
c007d.1 1 2 c007d.1 2 2 c007d.1 3 2 c007d.1 4 31 c007d.1 5 55 c007d.1 6 60 c007d.1 7 13 and when run code shown here:
library(data.table) x.out$grp <- rep(1:ceiling(nrow(x.out)/3),each=3) output <- x.out[, if(all(v3 > 25)) c(as.character(v1[1]), v2[1], v2[3], as.list(v3)), = grp] the output looks this:
grp v1 v2 v3 v4 v5 v6 1: 2 d3.1 4 6 31 55 60 the code checks if column 3 has 3 lines have values on 25 back-to-back, , if does, prints first line of column 2 happens, , last.
this works fine small data shown here. when run on file has 16,000 lines, run error mentioned above. there way around this? not particularly tied down using data.table understand it's faster other options.
here's output of dput(x.out):
> head(dput(x.out)) structure(list(v1 = c("c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1", "c007d.1"), v2 = 1:287, v3 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 24, 33, 43, 47, 48, 48, 48, 50, 53, 63, 70, 78, 82, 82, 82, 82, 82, 82, 84, 84, 84, 87, 88, 88, 93, 103, 138, 158, 175, 186, 222, 319, 398, 487, 540, 554, 574, 581, 584, 587, 588, 587, 559, 557, 557, 557, 556, 556, 556, 556, 556, 556, 554, 554, 546, 542, 530, 478, 462, 454, 437, 412, 374, 246, 244, 211, 54, 49, 1, 1, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 6, 6, 6, 7, 7, 8, 10, 12, 21, 68, 147, 533, 588, 600, 601, 620, 646, 666, 694, 709, 725, 729, 737, 743, 750, 784, 805, 829, 849, 907, 929, 957, 982, 984), grp = c(1l, 1l, 1l, 2l, 2l, 2l, 3l, 3l, 3l, 4l, 4l, 4l, 5l, 5l, 5l, 6l, 6l, 6l, 7l, 7l, 7l, 8l, 8l, 8l, 9l, 9l, 9l, 10l, 10l, 10l, 11l, 11l, 11l, 12l, 12l, 12l, 13l, 13l, 13l, 14l, 14l, 14l, 15l, 15l, 15l, 16l, 16l, 16l, 17l, 17l, 17l, 18l, 18l, 18l, 19l, 19l, 19l, 20l, 20l, 20l, 21l, 21l, 21l, 22l, 22l, 22l, 23l, 23l, 23l, 24l, 24l, 24l, 25l, 25l, 25l, 26l, 26l, 26l, 27l, 27l, 27l, 28l, 28l, 28l, 29l, 29l, 29l, 30l, 30l, 30l, 31l, 31l, 31l, 32l, 32l, 32l, 33l, 33l, 33l, 34l, 34l, 34l, 35l, 35l, 35l, 36l, 36l, 36l, 37l, 37l, 37l, 38l, 38l, 38l, 39l, 39l, 39l, 40l, 40l, 40l, 41l, 41l, 41l, 42l, 42l, 42l, 43l, 43l, 43l, 44l, 44l, 44l, 45l, 45l, 45l, 46l, 46l, 46l, 47l, 47l, 47l, 48l, 48l, 48l, 49l, 49l, 49l, 50l, 50l, 50l, 51l, 51l, 51l, 52l, 52l, 52l, 53l, 53l, 53l, 54l, 54l, 54l, 55l, 55l, 55l, 56l, 56l, 56l, 57l, 57l, 57l, 58l, 58l, 58l, 59l, 59l, 59l, 60l, 60l, 60l, 61l, 61l, 61l, 62l, 62l, 62l, 63l, 63l, 63l, 64l, 64l, 64l, 65l, 65l, 65l, 66l, 66l, 66l, 67l, 67l, 67l, 68l, 68l, 68l, 69l, 69l, 69l, 70l, 70l, 70l, 71l, 71l, 71l, 72l, 72l, 72l, 73l, 73l, 73l, 74l, 74l, 74l, 75l, 75l, 75l, 76l, 76l, 76l, 77l, 77l, 77l, 78l, 78l, 78l, 79l, 79l, 79l, 80l, 80l, 80l, 81l, 81l, 81l, 82l, 82l, 82l, 83l, 83l, 83l, 84l, 84l, 84l, 85l, 85l, 85l, 86l, 86l, 86l, 87l, 87l, 87l, 88l, 88l, 88l, 89l, 89l, 89l, 90l, 90l, 90l, 91l, 91l, 91l, 92l, 92l, 92l, 93l, 93l, 93l, 94l, 94l, 94l, 95l, 95l, 95l, 96l, 96l)), .names = c("v1", "v2", "v3", "grp"), row.names = c(na, -287l), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x7fdb7b006d78>)
the error message quite self-explanatory.
a reproducible example should provide. here 1 (replacing v3 in row 7 of example)
x.out <- data.table(structure(list(v1 = structure(c(1l, 1l, 1l, 1l, 1l, 1l, 1l), .label = "c007d.1", class = "factor"), v2 = 1:7, v3 = c(2l, 2l, 2l, 31l, 55l, 60l, 26l)), .names = c("v1", "v2", "v3"), class = c("data.frame"), row.names = c(na, -7l))) # add grouping column (data.table style) x.out[, grp := rep(seq_len(ceiling(.n/3)), each = 3,length.out=.n)] your issue grp=2 have 3 rows in v3, in grp=3, have 1, therefore when use as.list (in conjunction c), create lists differing lengths.
how want fill in missing columns grp=3?
edit:
for reproducible example, grps have rows except grp 96..
Comments
Post a Comment