谢谢jakub和Hack-R! 是的,这些是我的实际数据。我开始的数据如下:
[A] #first, longer dataset
CODE_t2 VALUE_t2
111 3641
112 1691
121 1271
122 185
123 522
124 0
131 0
132 0
133 0
141 626
142 170
211 0
212 0
213 0
221 0
222 0
223 0
231 95
241 0
242 0
243 0
244 0
311 129
312 1214
313 0
321 0
322 0
323 565
324 0
331 0
332 0
333 0
334 0
335 0
411 0
412 0
421 0
422 0
423 0
511 6
512 0
521 0
522 0
523 87
在上表中,我们可以看到44个土地使用CODES(我在第一个条目中不恰当地命名为“class”)某个城市。有些值只有0,这意味着该城市没有该类型的土地用途。 从该表开始,该表显示t2的所有土地利用类型及其对应的值(“VALUE_t2”),我必须重建每种类型的土地使用量(“VALUE_t1”)。
为此,我必须使用从t2到t1的“更改土地使用表”来增加和减去每个土地使用的价值(如果不是0),具体如下:
[B] #second, shorter dataset
CODE_t2 CODE_t1 VALUE_CHANGE1
121 112 2
121 133 12
121 323 0
121 511 3
121 523 2
123 523 4
133 123 3
133 523 4
141 231 12
141 511 37
所以,为了从VALUE_t2获得VALUE_t1,我可以从土地使用类型的值中减去2 + 12 + 0 + 3 + 2公顷(第二个,更短的表的前5个值)/第一个较长的桌子(1271公顷)的代码121,增加2公顷土地类型112,12公顷土地类型133,3公顷土地类型511和2公顷土地类型523.我必须这样做所有土地利用类型不同于0,后来也从t1到t0。
我要做的是一种循环,它可以根据每个土地使用类型/代码加上和减去VALUE_t2到VALUE_t1以及从VALUE_t1到VALUE_t0的值。
一旦我估计了VALUE_t1和VALUE_t0,我会将这些值放在一个简单的表中,显示相对变化(这里的值不是真实的):
CODE VALUE_t0 VALUE_t2 % VAR t2-t0
code1 50 100 ((100-50)/50)*100
code2 70 80 ((80-70)/70)*100
code3 45 34 ((34-45)/45)*100
到目前为止,我能做的是:
land_code <- names(A)[-1]
land_code
A$VALUE_t1 <- for(code in land_code{
cbind(A[1], A[land_code] - B[match(A$CODE_t2, B$CODE_t2), land_code])
}
如果我使用循环,我会收到错误,而如果我把它拿走:
A$VALUE_t1 <- cbind(A[1], A[land_code] - B[match(A$CODE_t2, B$CODE_t2), land_code])
它有效,但我真的没有得到我想要的东西......到目前为止,我正在研究如何获得一个新的列,其中包含新的“add&amp; subtract”值,但是没有成功然而。所以我研究了如何获得一个至少与土地利用类型匹配的新列,然后包括“加减”公式。
另一个问题是,通过使用“匹配”,我得到一个更短的A $ VALUE_t1表(13行而不是44行),而我想保留数据集A中的所有土地使用类型,因为我将拥有将它与包括VALUES_t0(我在这里没有显示)的表格相匹配。
很抱歉,我现在做不到这一点......我希望能够更好地解释我必须做的事情。我非常感谢您能为我提供的任何帮助。
非常感谢