2013-03-07 67 views
2

我试图在csv中的shapefile和数据表之间进行空间连接时遇到了一些麻烦。关于空间加入R的问题

Here's what my data looks like: 
Point Shapefile's attribute data (StudentID): 
ID  Address Long Lat 
123.00 street long lat 
456.00 street long lat 
789.01 street long lat 
223.00 street long lat 
412.02 street long lat 

Data Table (Table): 
ID  Name Age School 
123.00 name age school 
456.00 name age school 
789.01 name age school 
223.00 name age school 
412.02 name age school 

重要提示:StudentID包含大约500个记录,而表只有250在StudentID某些记录将不匹配。

问题1:

我有一个Excel文件,我转换成CSV导入到R.当运行加盟,我注意到,一些ID列改变了我的数据格式的(所以123.00将成为123;456.00456;789.01是相同的)。但是,当我在记事本中打开csv文件格式是正确的。我试着将表格读作.txt文件,但没有运气。有谁知道为什么会发生这种情况,有什么办法来克服这一点?

因为我不能参加基于精确匹配的数据,我决定尝试部分连接,因为ID都是唯一的,无论最后2个位数,这使我问题2 ...

问题2:

这是我用来连接两个:

[email protected] = data.frame([email protected], data[charmatch([email protected]$ID,Table$ID,]) 

这加入了数据,而且,正如预期,随着来港返回的行。我使用na.omit删除行,并且生成的数据包含所有匹配的数据。但是,在shapefile中,我所有的点都在那里。为什么这些点在记录被删除后仍然存在?

+1

你的损失'.00'可能是一个Excel的问题 - 我记得它导出到时不可预知的事情CSV。对于'加入',你有没有尝试过使用'merge'? – alexwhan 2013-03-07 05:38:43

+0

@alexwhan:我认为shapefile合并不是一个好方法。 Upone合并行的顺序可能会混合,而关联的形状/点的顺序不会自动更新。所以比赛方法在这里更合适。 – yellowcap 2013-03-07 19:30:27

回答

0

问题1:

Excel中有时出口浮动使用逗号值,为十进制分隔符。这可能会导致csv导入中出现问题。确保Excel对小数点分隔符使用.点,或者在导入时指定分隔符,即read.csv('file.csv', sep=';')

问题2: 如果要从shapefile中删除具有na值的点,则需要一个逻辑向量来选择不再需要的行。下面是如何可能看起来像(假设你的shape文件被命名为student_points)为例

student_points <- student_points[!is.na([email protected]$age), ]