估计你使用read.csv()出了问题。
#在线数据装载
airports<-read.csv("http://datasets.flowingdata.com/tuts/maparcs/airports.csv",header=TRUE)
flights<-read.csv("http://datasets.flowingdata.com/tuts/maparcs/flights.csv",header=TRUE,as.is=TRUE)
将上面的航空数据保存到工作目录:
write.csv(airports,file="airports.csv")
write.csv(flights,file="flights.csv")
由上述代码可以看出,
1. header是指定是否原文件是否包含列名, read.table默认值为FALSE, read.csv默认值为TRUE. 值得注意的是a.txt文件包含列名, 但是用read.table读取时使用了默认参数FALSE, 没有出错的原因在于: 在没指定header参数时, 如果第一行的元素比其他行的元素少一个, 自动将header参数设置为TRUE.
2. sep是用来指定分隔符的. 默认值为"", 表示1个或多个空格, tab键, 新的一行, 回车键. read.csv默认值为",".
3. quote用来指定包围字符型变量的符号, 读入后自动将其剔除. read.table默认值为"\"'", read.csv默认值为"\"", 故为了保留a与"a"的差别, 将quote设置为"".
4. row.names用于指定行名, 如果是数值k时, 则将第k列设为列名, 并将其从数据中移除. 值得注意的是a.txt文件包含行名, 但是用read.table默认不设置row.names参数, 没有出错的原因在于: 在没指定row.names参数时, 如果第一行的元素比其他行的元素少一个, 自动将row.names参数设置为1.
这正是您遇到的问题。如果您键入 airports$iata, fsub[j, ]$airport1,您将看到第一个有因子级别 假如“abc” ,而第二个因子级别 “abd” - 因此出现错误消息。
所以,你要读取本地的csv数据,则应该写成:
setwd("airport_data")
airports <- read.csv("airports.csv",header=TRUE)
flights<-read.csv("flights.csv",header=TRUE,as.is=TRUE)
|