我想遍历属性表(例如INPUT),确定交互的最小距离,并将该距离加上FID写入新表(例如OUTPUT)。为简单起见,我已将ArcGIS中的属性表导出为.csv。
以下是一些简化的示例数据 http://i.imgur.com/blDQfVS.png
例如,对于FID 001,没有相互作用,对于002,相互作用是在5000米处,对于003,在2000米处存在相互作用,对于004,在0米处存在相互作用。
我已经找到了逻辑,但是我很难将输出写入表格。这是我到目前为止所提出的(我只是在这里使用打印进行故障排除):
# Process rows and determine the minimum zone of influence
for (i in 1:nrow(INPUT)){
ifelse(INPUT$BUFFER_0k[i]>0, print("0"),
ifelse(INPUT$BUFFER_2k[i]>0, print("2000"),
ifelse(INPUT$BUFFER_5k[i]>0, print("5000"), print("NA"))))
我尝试用
之类的东西替换印刷品csvFile="C:\\...\\output.csv"
write.csv(c(INPUT$FID[i], "0"), file=csvFile, append=TRUE)
我甚至无法获得类似以下的内容来代替简单的打印声明
print(c(INPUT$FID[i]>0, "0"))
我感谢任何建议。
答案 0 :(得分:1)
您的代码使用print
立即打印值 - 这不是您想要的。您希望单独(a)计算结果,(b)将结果表写入文件。
首先,这是一个转换单行的函数:
get_dist = function (row) {
index = which(row > 0)[1]
if (is.na(index)) NA else switch(index, 0, 2000, 5000)
}
通过查看哪个是> 0的第一个索引(如果有的话)来工作。 switch
将该索引转换为距离。
现在我们将(字面上)函数应用于输入矩阵:
result = apply(input, 1, get_dist)
但是这个结果实际上是一个向量:
result
# 001 002 003 004
# NA 5000 2000 0
- 我们想要一个矩阵或数据框:
result = data.frame(distance = result)
result
# distance
# 001 NA
# 002 5000
# 003 2000
# 004 0
现在我们可以将它写入文件:
write.csv(result, csv_file, append = TRUE)