如何遍历shapefile属性表并将结果写入R中的新.csv表?

时间:2014-02-23 20:50:23

标签: r arcgis shapefile

我想遍历属性表(例如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"))

我感谢任何建议。

1 个答案:

答案 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)
相关问题