【发布时间】:2020-09-21 22:04:11
【问题描述】:
我正在尝试基于 Group 变量 item.map 编写代码,该变量具有项目信息,其中包含一个 q 矩阵,显示哪个项目与哪个组相关联。
Group <- c(1,2,3,4)
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),
group.3 = c(1,1,1,0),
group.4 = c(0,0,0,1))
> item.map
item.id group.1 group.2 group.3 group.4
1 21 1 0 1 0
2 41 1 1 1 0
3 61 1 0 1 0
4 72 0 1 0 1
在这个item.map group.1 有 3 个项目,而 group.2 有两个项目,group.3 有三个,group.4 有 1 个项目。使用这个 item.map 我想在块中分配这些项目下面的代码,但我无法插入item.map 信息。
OUTPUT <- as.data.frame(c())
for(i in 1:length(item.map$item.id)) {
for(k in 0:(length(Group))) { # here with the length(State) I gained the sequqnece of 0,1,2,3
output <- paste0("Equal = ",paste0(paste("(", "G1, ",item.map$item.id[i], ","," Slope[",k,"])",collapse=", ", sep=""),", ",
paste( "(", "G2, ",item.map$item.id[i], ","," Slope[",k,"])",collapse=", ", sep=""),
";"))
OUTPUT <- c(OUTPUT, output)
}
}
[1] "Equal = (G1, 21, Slope[0]), (G2, 21, Slope[0]), (G3, 21, Slope[0]), (G4, 21, Slope[0]);"
[1] "Equal = (G1, 21, Slope[1]), (G2, 21, Slope[1]), (G3, 21, Slope[1]), (G4, 21, Slope[1]);"
[1] "Equal = (G1, 21, Slope[2]), (G2, 21, Slope[2]), (G3, 21, Slope[2]), (G4, 21, Slope[2]);"
[1] "Equal = (G1, 21, Slope[3]), (G2, 21, Slope[3]), (G3, 21, Slope[3]), (G4, 21, Slope[3]);"
[1] "Equal = (G1, 21, Slope[4]), (G2, 21, Slope[4]), (G3, 21, Slope[4]), (G4, 21, Slope[4]);"
[1] "Equal = (G1, 41, Slope[0]), (G2, 41, Slope[0]), (G3, 41, Slope[0]), (G4, 41, Slope[0]);"
[1] "Equal = (G1, 41, Slope[1]), (G2, 41, Slope[1]), (G3, 41, Slope[1]), (G4, 41, Slope[1]);"
[1] "Equal = (G1, 41, Slope[2]), (G2, 41, Slope[2]), (G3, 41, Slope[2]), (G4, 41, Slope[2]);"
[1] "Equal = (G1, 41, Slope[3]), (G2, 41, Slope[3]), (G3, 41, Slope[3]), (G4, 41, Slope[3]);"
[1] "Equal = (G1, 41, Slope[4]), (G2, 41, Slope[4]), (G3, 41, Slope[4]), (G4, 41, Slope[4]);"
[1] "Equal = (G1, 61, Slope[0]), (G2, 61, Slope[0]), (G3, 61, Slope[0]), (G4, 61, Slope[0]);"
[1] "Equal = (G1, 61, Slope[1]), (G2, 61, Slope[1]), (G3, 61, Slope[1]), (G4, 61, Slope[1]);"
[1] "Equal = (G1, 61, Slope[2]), (G2, 61, Slope[2]), (G3, 61, Slope[2]), (G4, 61, Slope[2]);"
[1] "Equal = (G1, 61, Slope[3]), (G2, 61, Slope[3]), (G3, 61, Slope[3]), (G4, 61, Slope[3]);"
[1] "Equal = (G1, 61, Slope[4]), (G2, 61, Slope[4]), (G3, 61, Slope[4]), (G4, 61, Slope[4]);"
[1] "Equal = (G1, 72, Slope[0]), (G2, 72, Slope[0]), (G3, 72, Slope[0]), (G4, 72, Slope[0]);"
[1] "Equal = (G1, 72, Slope[1]), (G2, 72, Slope[1]), (G3, 72, Slope[1]), (G4, 72, Slope[1]);"
[1] "Equal = (G1, 72, Slope[2]), (G2, 72, Slope[2]), (G3, 72, Slope[2]), (G4, 72, Slope[2]);"
[1] "Equal = (G1, 72, Slope[3]), (G2, 72, Slope[3]), (G3, 72, Slope[3]), (G4, 72, Slope[3]);"
[1] "Equal = (G1, 72, Slope[4]), (G2, 72, Slope[4]), (G3, 72, Slope[4]), (G4, 72, Slope[4]);"
因此,在所需的输出中,G1 不应该有项目 72 并且 G2 不应该在分组块中有项目 21 和 61 信息。
此外,我无法在我的代码中对“G1”和“G2”进行排序。考虑到G1、G2、G3 和G4,有没有办法将这两行合并为一条?
output <- paste0("Equal = ",paste0(paste("(", "G1, ",item.map$item.id[i], ","," Slope[",k,"])",collapse=", ", sep=""),", ",
paste("(", "G2, ",item.map$item.id[i], ","," Slope[",k,"])",collapse=", ", sep=""),", ",
paste("(", "G3, ",item.map$item.id[i], ","," Slope[",k,"])",collapse=", ", sep=""),", ",
paste( "(", "G4, ",item.map$item.id[i], ","," Slope[",k,"])",collapse=", ", sep=""),
";"))
想要的输出是:
[1] "Equal = (G1, 21, Slope[0]), (G3, 21, Slope[0]);"
[1] "Equal = (G1, 21, Slope[1]), (G3, 21, Slope[1]);"
[1] "Equal = (G1, 21, Slope[2]), (G3, 21, Slope[2]);"
[1] "Equal = (G1, 21, Slope[3]), (G3, 21, Slope[3]);"
[1] "Equal = (G1, 21, Slope[4]), (G3, 21, Slope[4]);"
[1] "Equal = (G1, 41, Slope[0]), (G2, 41, Slope[0]), (G3, 41, Slope[0]);"
[1] "Equal = (G1, 41, Slope[1]), (G2, 41, Slope[1]), (G3, 41, Slope[1]);"
[1] "Equal = (G1, 41, Slope[2]), (G2, 41, Slope[2]), (G3, 41, Slope[2]);"
[1] "Equal = (G1, 41, Slope[3]), (G2, 41, Slope[3]), (G3, 41, Slope[3]);"
[1] "Equal = (G1, 41, Slope[4]), (G2, 41, Slope[4]), (G3, 41, Slope[4]);"
[1] "Equal = (G1, 61, Slope[0]), (G3, 61, Slope[0]);"
[1] "Equal = (G1, 61, Slope[1]), (G3, 61, Slope[1]);"
[1] "Equal = (G1, 61, Slope[2]), (G3, 61, Slope[2]);"
[1] "Equal = (G1, 61, Slope[3]), (G3, 61, Slope[3]);"
[1] "Equal = (G1, 61, Slope[4]), (G3, 61, Slope[4]);"
[1] "Equal = (G2, 72, Slope[0]), (G4, 72, Slope[0]);"
[1] "Equal = (G2, 72, Slope[1]), (G4, 72, Slope[1]);"
[1] "Equal = (G2, 72, Slope[2]), (G4, 72, Slope[2]);"
[1] "Equal = (G2, 72, Slope[3]), (G4, 72, Slope[3]);"
[1] "Equal = (G2, 72, Slope[4]), (G4, 72, Slope[4]);"
有人有什么想法吗? 谢谢
【问题讨论】:
-
请在此问题和stackoverflow.com/questions/64000557/… 之间进行选择...要么删除那个问题,要么删除这个问题。请不要同时打开。
-
这些问题实际上略有不同。
-
这里,我认为'group1', ;group2' 需要一个嵌套循环,因为 k 从 0:group 循环,而在 R 中,索引从 1 开始。