0

我对 R 比较陌生,但到目前为止,我已经通过有效的谷歌搜索进行了管理。不幸的是,我很难解决我目前与谷歌有关的问题。

我有大量文件要编辑并另存为其他格式。这些表格包含约 80,000 行中的纬度、经度和平均温度数据。我需要做的是只选择与我的学习密切相关的地区和月份。虽然我可以很容易地为单个文件执行此操作,但我似乎无法自动化我拥有的 111 个文件的过程(我想将它们分开,因为它对于下游 GIS 应用程序会更容易)。

对于单个文件,这是适合我的过程:

test<-read.fwf("air_temp.1900", widths = c(8,8,8,8,8,8,8,8,8,8,8,8,8,8), header=F)
test1<-subset(test, V1 > -135 & V1< -55 &  V2 < 80 & V2 > 55,
select=c("V1","V2","V8","V9","V10"))
write.csv(test1.csv,file="test1",row.names=F)

这是数据结构的一个示例(前两列对应经度和纬度,其余列对应于 1 月至 12 月的月平均温度):

> test[1:3,]
       V1    V2    V3    V4    V5    V6   V7   V8  V9 V10  V11   V12   V13   V14
1 -179.75 71.25 -26.7 -19.5 -22.5 -22.3 -8.0 -0.6 2.5 0.3 -2.6  -9.6 -12.6 -23.6
2 -179.75 68.75 -28.5 -21.3 -24.4 -24.4 -8.0  0.0 4.0 0.8 -2.8 -11.1 -14.1 -26.5
3 -179.75 68.25 -29.2 -22.0 -25.2 -25.1 -8.9 -0.1 3.9 0.7 -3.4 -12.0 -14.9 -27.5

这是我尝试自动化该过程的尝试,尽管它显然存在缺陷:

names<-list.files(pattern='air_temp.*')
names1<-substr(names,1,13)

 for(i in names2){
filepath <- file.path("...Climate.geo.udel.edu/",paste(i))
assign(i, read.fwf(filepath, widths = c(8,8,8,8,8,8,8,8,8,8,8,8,8,8), header=F))

#up to here works fine, I can automate the loading of these files into R
#but editing and exporting them doesn't seem to work

subset(i, V1 > -135 & V1 < -55 &  V2 < 80 & V2 > 55, select=c(V1,V2,V8,V9,V10))
}

然后该过程失败,并显示以下消息:“subset.default(i, V1 > -135 & V1 < -55 & V2 < 80 & V2 > 55, select = c(V1, : object 'V1' not found) 中的错误”

我可以推断出“i”不是正确的对象,但我似乎无法弄清楚我应该在那里放什么。

我什至还没有开始尝试自动化 write.csv 部分,所以任何关于这方面的建议都将不胜感激。

先感谢您,

4

1 回答 1

0

您的错误是说没有名为 的变量V1。这是真实的。read.fwf返回一个data.frame。是由or持有的V1一列。data.frameitest

要使用 的列data.frame,您可以使用with函数或使用$语法来访问 中的列data.frame

在您的情况下,with语法可能更简单:

subset(i, with(i, V1 > -135 & V1 < -55 &  V2 < 80 & V2 > 55, select=c(V1,V2,V8,V9,V10)))

要直接从变量访问每一列,您可以使用以下语法:

i$V1
于 2013-05-23T22:28:14.080 回答