Использование функции accumarray для определенного набора данных в качестве цикла - PullRequest
0 голосов
/ 02 июля 2019

Я написал код, включающий функцию accumarray, чтобы преобразовать следующий входной набор данных входной набор данных

в другой кадр данных, представленный новой матрицей, содержащей нули и, в конечном счете, 1 или 2 значения в соответствии со значениями для переменных A, B и C входного набора данных, следующим образом:

выходной набор данных

Я написал следующий код, но я бы хотел сделать его динамическим циклом, поскольку входная таблица может содержать различное количество переменных (по-прежнему с 2 значениями на переменную).

required_subsA <- cbind(rep(x = 1:nrow(input),
                            times = 2),c(input$A,input$A.1))
required_vals <- rep(x = 1,
                     times = nrow(x = required_subs))
required_sz <- c(nrow(x = input), 10)

A <- cbind(paste("s", 1:4, sep = "_"),
           as.data.frame(x = pracma::accumarray(subs = required_subsA,
                                                val = required_vals,
                                                sz = required_sz)))
names(x = A) <- c("subject",paste("A", 1:10, sep = "."))

required_subsB <- cbind(rep(x = 1:nrow(input),
                            times = 2),c(input$B,input$B.1))

B <- cbind(as.data.frame(x = pracma::accumarray(subs = required_subsB,
                                                val = required_vals,
                                                sz = required_sz)))
names(x = B) <- c(paste("B", 1:10, sep = "."))

required_subsC <- cbind(rep(x = 1:nrow(input),
                            times = 2),c(input$C,input$C.1))

C <- cbind(as.data.frame(x = pracma::accumarray(subs = required_subsC,
                                                val = required_vals,
                                                sz = required_sz)))
names(x = C) <- c(paste("C", 1:10, sep = "."))

data_final<-cbind(A,B,C)
...