for循环和应用条件忽略有限的数据

时间:2014-09-10 20:22:07

标签: r loops

我有这种格式的data.frame

     data.frame':   566171 obs. of  10 variables:
     $ id    : Factor w/ 120 levels "2200100","2200200",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ year  : int  1950 1950 1950 1950 1950 1950 1950 1950 1950 1950 ...
     $ yday  : int  1 2 3 4 5 6 7 8 9 10 ...
     $ date  : Date, format: "1950-01-01" "1950-01-02" ...
     $ t_max : atomic  -17.2 -23.9 -25 -22.8 -19.4 -19.4 -11.1 -15.6 -17.8 -20.6 ...
     ..- attr(*, "long.name")= chr "daily maximum temperature"
     ..- attr(*, "units")= chr "°C"
      $ rain  : atomic  0 0 0 0 0 0 0 0 0 0 ...
     ..- attr(*, "long.name")= chr "total rainfall"
      ..- attr(*, "units")= chr "mm"

我编写了以下循环来对数据进行分组:

    library (seas)

    uniq <- unique(unlist(mdata$id))
    for (i in 1: length(uniq)){
      data_1 <- subset(mdata, id == uniq[i])
      d1 <-mksub(data_1) 
      year.plot(mksub(d1))
    }

它适用于某一点,但是,当站ID没有足够的数据时,循环停止运行。如何在循环中告诉R忽略没有足够数据来应用year.plot函数的工作站ID并继续使用其他工作站直到最终ID?

1 个答案:

答案 0 :(得分:1)

看起来托马斯列出了你应该做的一般事情。让我看看我是否可以把它放在一起给你。我将使用来自海洋包的mscdata,并假设任何小于2的东西都不够

library(seas)

data(mscdata)

uniq <- unique(unlist(mscdata$id))


for (i in 1: length(uniq)){
  data_1 <- subset(mscdata, id == uniq[i])
  try(if(length(data_1) < 2) {
    next
  } else {
    d1 <-mksub(data_1) 
    year.plot(mksub(d1))
  })
}

这个可重复的例子应该适合你。