【发布时间】:2014-03-17 10:15:43
【问题描述】:
我有一个 i 次 j (ixj) 虚拟矩阵,用于对公司的事件进行评级,其中包含 i 个日期和 j 个不同的公司。在评分发生的那一天评分为[i,j]=1,否则为 0。
我想创建一个列表,其中包含 4 个子列表(4 家公司各有 1 个)。每个子列表都说明了特定公司的评级事件的行号。
这是我的代码:
r<-list(); i=1;j=2;
for(j in 1:4){
x<-list()
for(i in 100){
if(rating[i,j]!=0){
x<-c(x,i)
i=i+1
}
else{i=i+1}
}
r[[j]]<-x
j=j+1
}
它不知何故不起作用,我真的不知道错误在哪里。 x 子列表始终为空。有人可以帮忙吗?
非常感谢!
这是一个示例评分矩阵:
rating<-matrix(data = 0, nrow = (100), ncol = 4, dimnames=list(c(1:100), c(1:4)));
rating[3,1]=1;rating[7,1]=1;rating[20,1]=1;rating[75,1]=1;
rating[8,2]=1;rating[40,2]=1;rating[50,2]=1;rating[78,2]=1;
rating[1,3]=1;rating[4,3]=1;rating[17,3]=1;rating[99,3]=1;
rating[10,4]=1;rating[20,4]=1;rating[30,4]=1;rating[90,4]=1;
【问题讨论】:
-
每次在 j-indexed-loop 中遇到
x<-list()时,x中的任何先前值都将被删除。您也不应该在 i-indexed-loop 中更改 i。 for-function 会为你做这件事。 -
您好,感谢您的帮助。我不认为这是错误:我希望 x 子列表被覆盖,因为在第二个 for 循环中,公司 j 的所有评级事件都存储在 x 中。然后我将 x 添加到列表 r,并为公司 j+1 重新开始(所以 x 被覆盖,但这没关系,因为它存储在 r[[j]] 中。
-
使用
dput发布一小部分rating -
刚刚做了上面,还调整了该矩阵的代码,所以你可以复制所有内容。谢谢你的帮助!!
标签: r list if-statement for-loop