矩阵Dat如下(实际行数和列数很多,100万*20)
ID01 ID02 ID03 ID04 ID05
[1,] 1 9423 1949 0 110
[2,] 1 9720 2000 0 190
[3,] 1 8920 1996 0 110
[4,] 1 8022 1992 0 113
[5,] 1 9110 1963 0 110
问题1:根据ID05的值来给ID04列赋值,只要ID05的值等于190或113就给ID04赋值1,否则赋值为0.
使用下面代码很容易实现:
Dat$ID04 = 0Dat$ID04[which(Dat$ID05 == 190 | Dat$ID05 == 113)] = 1
但问题是:
问题2:根据ID05的值来给ID04列赋值,只要ID05的值等于190就给ID04赋值为ID03/ID02,否则赋值为0.
Dat$ID04[which(Dat$ID05 == 190 | Dat$ID05 == 113)] = Dat$ID03/ID02
此时使用上面语句就有警告,有时无法使用全部操作。
什么原因?如何解决?不使用循环。