Буду признателен за любую помощь для эффективного разбиения фрейма данных на несколько фрагментов, которые будут переданы в список списков на основе переменной imput
.
Мой код ниже работает для нескольких подмножеств, но у меня есть 100 подмножеств для создания, и код становится слишком большим и трудным для обработки. Поэтому мне нужен более эффективный подход, который позволяет достичь того же результата без большого количества кода.
Подход imputation_groups <- split(dat, dat$imput)
, обсуждаемый здесь , позволяет мне разбить мои данные на список из нескольких кусков (фреймов данных) на основе imput
, но я хочу иметь возможность впоследствии извлекать переменные из каждого из чанки, чтобы создать список из каждого чанка, а затем список этих списков. Кроме того, я не уверен, как создать переменную N <- nrow(dT_P1), N <- nrow(dT_P2), N <- nrow(dT_P3), N <- nrow(dT_P4), N <- nrow(dT_P5)
для каждого из списков, созданных для каждого из блоков.
мои данные:
dat <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
3, 3, 4, 4, 4, 4, 4), imput = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5,
1, 2, 3, 4, 5, 1, 2, 3, 4, 5), A = c(1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), B = c(1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0), Pass = c(278, 278,
278, 278, 278, 100, 100, 100, 100, 100, 153, 153, 153, 153, 153,
79, 79, 79, 79, 79), Fail = c(740, 743, 742, 743, 740, 7581,
7581, 7581, 7581, 7581, 1231, 1232, 1235, 1235, 1232, 1731, 1732,
1731, 1731, 1731), Weights_1 = c(4, 3, 4, 3, 3, 1, 2, 1, 2, 1,
12, 12, 11, 12, 12, 3, 5, 3, 3, 3), Weights_2 = c(3, 3, 3, 3,
3, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 3, 3, 3, 3, 3), Weights_3 = c(4,
3, 3, 3, 3, 1, 2, 1, 1, 1, 12, 12, 11, 12, 12, 3, 3, 3, 3, 3),
Weights_4 = c(3, 3, 4, 3, 3, 1, 1, 1, 2, 1, 12, 12, 13, 12,
12, 3, 2, 3, 3, 3), Weights_5 = c(3, 3, 3, 3, 3, 1, 0, 1,
1, 1, 12, 12, 12, 12, 12, 3, 3, 3, 3, 3), Weights_6 = c(4,
3, 3, 3, 3, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 3, 3, 3, 3,
3), Weights_7 = c(3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 12, 12, 12,
12, 12, 3, 3, 3, 3, 3), Weights_8 = c(3, 3, 3, 3, 3, 1, 1,
1, 1, 1, 15, 12, 12, 12, 12, 3, 3, 3, 3, 3), Weights_9 = c(3,
3, 3, 4, 3, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 2, 3, 3, 3,
3), Weights_10 = c(3, 3, 4, 3, 3, 1, 1, 1, 1, 1, 12, 10,
12, 12, 12, 3, 3, 3, 3, 3)), class = "data.frame", row.names = c(NA,
-20L))
мой подход:
##subsetting based on `imput`
##imput = `1`
dT_P1<- dat[dat$imput == '1',]
N <- nrow(dT_P1)
C <-ncol(dT_P1)
ncases <- dT_P1$Pass
nn <- dT_P1$Fail + dT_P1$Pass
A <- dT_P1$A
B <- dT_P1$B
id <- dT_P1$id
imput <- dT_P1$imput
w_1 <- dT_P1$Weights_1
w_2 <- dT_P1$Weights_2
w_3 <- dT_P1$Weights_3
w_4 <- dT_P1$Weights_4
w_5 <- dT_P1$Weights_5
w_6 <- dT_P1$Weights_6
w_7 <- dT_P1$Weights_7
w_8 <- dT_P1$Weights_8
w_9 <- dT_P1$Weights_9
w_10 <- dT_P1$Weights_10
dat1 <- list (N = N,
ncases = ncases, A = A, B = B, id = id, P = imput, nn = nn,
weights = cbind(w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9, w_10))
##imput = `2`
dT_P2<- dat[dat$imput == '2',]
N <- nrow(dT_P2)
C <-ncol(dT_P2)
ncases <- dT_P2$Pass
nn <- dT_P2$Fail + dT_P2$Pass
A <- dT_P2$A
B <- dT_P2$B
id <- dT_P2$id
imput <- dT_P2$imput
w_1 <- dT_P2$Weights_1
w_2 <- dT_P2$Weights_2
w_3 <- dT_P2$Weights_3
w_4 <- dT_P2$Weights_4
w_5 <- dT_P2$Weights_5
w_6 <- dT_P2$Weights_6
w_7 <- dT_P2$Weights_7
w_8 <- dT_P2$Weights_8
w_9 <- dT_P2$Weights_9
w_10 <- dT_P2$Weights_10
dat2 <- list (N = N,
ncases = ncases, A = A, B = B, id = id, P = imput, nn = nn,
weights = cbind(w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9, w_10))
##imput = `3`
dT_P3<- dat[dat$imput == '3',]
N <- nrow(dT_P3)
C <-ncol(dT_P3)
ncases <- dT_P3$Pass
nn <- dT_P3$Fail + dT_P3$Pass
A <- dT_P3$A
B <- dT_P3$B
id <- dT_P3$id
imput <- dT_P3$imput
w_1 <- dT_P3$Weights_1
w_2 <- dT_P3$Weights_2
w_3 <- dT_P3$Weights_3
w_4 <- dT_P3$Weights_4
w_5 <- dT_P3$Weights_5
w_6 <- dT_P3$Weights_6
w_7 <- dT_P3$Weights_7
w_8 <- dT_P3$Weights_8
w_9 <- dT_P3$Weights_9
w_10 <- dT_P3$Weights_10
dat3 <- list (N = N,
ncases = ncases, A = A, B = B, id = id, P = imput, nn = nn,
weights = cbind(w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9, w_10))
##imput = `4`
dT_P4<- dat[dat$imput == '4',]
N <- nrow(dT_P4)
C <-ncol(dT_P4)
ncases <- dT_P4$Pass
nn <- dT_P4$Fail + dT_P4$Pass
A <- dT_P4$A
B <- dT_P4$B
id <- dT_P4$id
imput <- dT_P4$imput
w_1 <- dT_P4$Weights_1
w_2 <- dT_P4$Weights_2
w_3 <- dT_P4$Weights_3
w_4 <- dT_P4$Weights_4
w_5 <- dT_P4$Weights_5
w_6 <- dT_P4$Weights_6
w_7 <- dT_P4$Weights_7
w_8 <- dT_P4$Weights_8
w_9 <- dT_P4$Weights_9
w_10 <- dT_P4$Weights_10
dat4 <- list (N = N,
ncases = ncases, A = A, B = B, id = id, P = imput, nn = nn,
weights = cbind(w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9, w_10))
##imput = `5`
dT_P5<- dat[dat$imput == '5',]
N <- nrow(dT_P5)
C <-ncol(dT_P5)
ncases <- dT_P5$Pass
nn <- dT_P5$Fail + dT_P5$Pass
A <- dT_P5$A
B <- dT_P5$B
id <- dT_P5$id
imput <- dT_P5$imput
w_1 <- dT_P5$Weights_1
w_2 <- dT_P5$Weights_2
w_3 <- dT_P5$Weights_3
w_4 <- dT_P5$Weights_4
w_5 <- dT_P5$Weights_5
w_6 <- dT_P5$Weights_6
w_7 <- dT_P5$Weights_7
w_8 <- dT_P5$Weights_8
w_9 <- dT_P5$Weights_9
w_10 <- dT_P5$Weights_10
dat5 <- list (N = N,
ncases = ncases, A = A, B = B, id = id, P = imput, nn = nn,
weights = cbind(w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9, w_10))
##creating the list of lists:
mydatalist <- list(dat1, dat2, dat3, dat4, dat5)