【问题标题】:if subset yields zero observations skip to next value in r loop如果子集产生零观察值,则跳到 r 循环中的下一个值
【发布时间】:2014-06-16 15:26:43
【问题描述】:

我正在绘制数据,并且我有一个循环,它首先找到与特定 ID 号对应的所有数据。有时该特定 ID 没有数据,所以我需要在循环中添加一个 if else if 语句,否则我会收到一个错误,即绘图没有 x 值

实际代码

 df<-subset(MonthFiltered,t_all<100)
 IDunique<-unique(MonthFiltered$ID)

for (f in IDunique) {
temp<-subset(df,ID==f)
name<-paste(paste(f, "cdf", sep="-"),"png", sep=".")
png(name)
plot(ecdf(temp$t_all))
dev.off()
}

需要类似的东西

for (f in IDunique) {
temp<-subset(df,ID==f)
#if temp obs.=0 then skip to next f
#else if 
name<-paste(paste(f, "cdf", sep="-"),"png", sep=".")
png(name)
plot(ecdf(temp$t_all))
dev.off()
}

【问题讨论】:

    标签: r if-statement subset


    【解决方案1】:

    如果没有观察到,那么temp的行数将为0,所以你可以跳到下一个值。

    if (nrow(temp) == 0) next
    

    【讨论】:

      【解决方案2】:

      使用NROW(temp$t_all[!is.na(temp$t_all)])获取包含有效数据的temp$t_all的长度,如下:

      df <- subset(MonthFiltered,t_all<100) 
      # now loop through the unique values of ID
      IDunique <- unique(MonthFiltered$ID)
      for (f in IDunique) {
        temp<-subset(df,ID==f)
        # check to see if the subset actually contains non-na data
        if (NROW(temp$t_all[!is.na(temp$t_all)]) > 0){
          # there is valid data in the subset, so we can do something
          name<-paste(paste(f, "cdf", sep="-"),"png", sep=".")
          png(name)
          plot(ecdf(temp$t_all))
          dev.off()
        } else {
          # There is no data in the subset, so don't bother
        }
      }
      

      注意如果您提供一些真实的数据并更好地描述您的数据框,那将会有所帮助。我从您的问题中猜测t_all 包含您想要查看的数据。

      【讨论】:

        猜你喜欢
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        相关资源
        最近更新 更多