Я пытаюсь написать код на основе переменной Group, item.map, которая содержит информацию об элементе, которая включает q-матрицу, показывающую, какой элемент связан с какой группой.

Group <- c(1,2)
item.map <- data.frame(
  item.id = c(21,41,61,72),
  group.1 = c(1,1,1,0),
  group.2 = c(0,1,0,1)
)

> item.map
  item.id group.1 group.2
1      21       1       0
2      41       1       1
3      61       1       0
4      72       0       1

В этом item.map в группе 1 было 3 элемента, а в группе 2 - два элемента. Используя этот item.map, я хотел назначить эти элементы в фрагменте кода ниже, но мне не удалось подключить информацию item.map.

OUTPUT <- as.data.frame(c())
for(j in 1:length(Group)) {
  
  output <- c(paste0("Group G",unique(Group)[j],":"),
             paste0("Items = ",paste0(item.map$item.id, collapse=", "), ";"), #Items
             paste0(paste0("Codes(", item.map$item.id, ") = 0(0), 1(1)",collapse="; ", sep=""),";"), #Codes
             paste0(paste("Model(", item.map$item.id, ") = 2PL",collapse="; ", sep=""),";"))
  
  
  OUTPUT <- c(OUTPUT, output)
  
}

> OUTPUT
[1] "Group G1:"
[1] "Items = 21, 41, 61, 72;"
[1] "Codes(21) = 0(0), 1(1); Codes(41) = 0(0), 1(1); Codes(61) = 0(0), 1(1); Codes(72) = 0(0), 1(1);"
[1] "Model(21) = 2PL; Model(41) = 2PL; Model(61) = 2PL; Model(72) = 2PL;"

[1] "Group G2:"
[1] "Items = 21, 41, 61, 72;"
[1] "Codes(21) = 0(0), 1(1); Codes(41) = 0(0), 1(1); Codes(61) = 0(0), 1(1); Codes(72) = 0(0), 1(1);"
[1] "Model(21) = 2PL; Model(41) = 2PL; Model(61) = 2PL; Model(72) = 2PL;"

Таким образом, в желаемом выводе Group 1 не должно иметь элемента 72, а Группа 2 не должна иметь информацию об элементах 21 и 61 в блоке группирования.

The desired output is:
    > OUTPUT
    [1] "Group G1:"
    [1] "Items = 21, 41, 61;"
    [1] "Codes(21) = 0(0), 1(1); Codes(41) = 0(0), 1(1); Codes(61) = 0(0), 1(1);"
    [1] "Model(21) = 2PL; Model(41) = 2PL; Model(61) = 2PL;"
    
    [1] "Group G2:"
    [1] "Items = 41, 72;"
    [1] "Codes(41) = 0(0), 1(1); Codes(72) = 0(0), 1(1);"
    [1] "Model(41) = 2PL; Model(72) = 2PL;"

У кого-нибудь есть идеи? благодаря

1
amisos55 21 Сен 2020 в 23:39

1 ответ

Лучший ответ

Здесь нам нужно сделать подмножество на основе столбцов «группы» (добавлено as.logical(item.map[[paste0("group.", j)]]))

OUTPUT <- c()
for(j in 1:length(Group)) {
  tmp <- item.map$item.id[as.logical(item.map[[paste0("group.", j)]])]
  output <- c(paste0("Group G",unique(Group)[j],":"),
     paste0("Items = ",
       paste0(tmp, collapse=", "), ";"), #Items
        paste0(paste0("Codes(", tmp, ") = 0(0), 1(1)",
                 collapse="; ", sep=""),";"), #Codes
        paste0(paste("Model(", tmp, ") = 2PL",collapse="; ", sep=""),";"))
  
  
  OUTPUT <- c(OUTPUT, output)
  }
1
akrun 21 Сен 2020 в 20:56