我是R的新手,我正在尝试处理存储在数据框中的大量天气数据。我的目标是遍历数据并将我的数据框的Element列与几个值进行比较。我计划根据Element类的值来做一些不同的事情,就像传统的switch语句一样。元素值可以是24个不同值之一,例如TMAX或TMIN。目前,元素列是一个具有24个级别的因子。根据Element的值,循环运行不同代码集的数据的最快方法是什么?如何比较Element中的值以检查它是否等于TMAX?效率非常重要。任何建议都表示赞赏。
示例:
library("sqldf")
library("RPostgreSQL")
width = c(11, 4, 2, 4)
label = c("ID", "Year", "Month", "Element")
for (i in 1:31)
{
width = c(width, 5, 1, 1, 1)
label = c(label, paste("Value ",i), paste("MFLAG ",i), paste("QFLAG ",i), paste("SFLAG", i))
}
test = read.fwf("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/all/USW00093734.dly", header = FALSE, fill = TRUE, widths = width, col.names = label)
#You need to set up your database for this to work
for(i in 1:length(test$ID))
{
if(as.character(test$Element) == "TMAX")
{
for(j in 1:31)
{
insert_statement = paste("INSERT into noaa_temperature (id, max_temp, date) values (", test$ID[[i]],",",test[paste("Value..",j)],toString(as.Date(ISOdate(test$Year,test$Month,j))),")")
sqldf(insert_statement)
}
}
if((as.character(test$Element) == "WT01") || (as.character(test$Element) == "WT03")
{
for(j in 1:31)
{
if(test[paste("Value..",j)] == 1)
{
insert_statement = paste("INSERT into noaa_weather_type (id, code, date) values (", test$ID[[i]],",",toString(test$Element),toString(as.Date(ISOdate(test$Year,test$Month,j))),")")
sqldf(insert_statement)
}
}
}
}
我想在每行上执行不同的代码段,具体取决于test中Element列的值。