【问题标题】:Avoid empty data frames in a list in R避免 R 中列表中的空数据框
【发布时间】:2020-09-30 14:41:43
【问题描述】:

我正在使用 R 的数据检索包从 USGS 下载每日流量数据。下载每个站的数据后,我想将其添加到列表中。但是,当站的数据为空时,我想跳过它而不是将其添加到列表中,而是在命令窗口中写入“站 x 为空”。我正在使用以下代码:

siteNumber <- c("094985005","09498501","09489500","09489499","09498502","09511300","09498400","09498500","09489700","09500500","09489082","09510200","09489100","09490500","09510180","09494000","09490000","09489086","09489089","09489200","09489078","09510170","09493500","09493000","09498503","09497500","09510000","09509502","09509500","09492400","09492500","09497980","09497850","09492000","09497800","09510150","09499500","09489076","09489075","09489070","09510080","09510100","09509000","09510070","09489030","09489040","09499000","09496700","09509501","09496500","09496600","09494300","09490800","09496000","09498870","09491000","09495800","09508500","09497900","09494500","09495500","09494200","09498800","09497700","09508300","09495000","09507950","09508000","09507980","09506500","09507500","09507600","09507900","09507800","09507700","09507580","09506000","09505800","09505550","09502960","09503000","09505000","09505500","09503500","09503300","09505400","09505260","09505200","09505250","09505350","09505220","09504500","09505300","09502900","09504000","09504430","09504420","09502800","09504421","09503700","09502750","09503800","09503720","09512170","09512190","09512162","09512070","09512100","0949999999","09512200","09512165","09512406","09512184","09502000","09502500","09512405","09512403","0946666666","09501000","09512407","0948888888","09512060","09511500")


#siteNumber <- c("094985005","09498501")
str(siteNumber)


i <- 1
n <- length(siteNumber)
listDF <- list()

for (i in 1:n) {
  
  Daily_Streamflow <- readNWISdv(siteNumber[i],parameterCd="00060", statCd="00003", "","")
  
  if (nrow(Daily_Streamflow) > 0) {
    siteINFO <- readNWISsite(siteNumber[i])
    
    colnames(Daily_Streamflow[3]) <- "Date"
    Daily_Streamflow$DailyStreamflow  <- Daily_Streamflow$X_00060_00003 
    Daily_Streamflow <- Daily_Streamflow[,c(-1,-2,-4,-5)]
    
    listDF[[i]] <- Daily_Streamflow
    names(listDF)[i] <- siteNumber[i]
  }
  
  else{
    name <- paste(siteNumber[i],"is empty")
    print(name)
  }
  i <- i + 1
}

目前不工作,因为它还将空数据帧 (DailyStreamflow) 添加到列表中(即 [[28]] [[29]]),如下图所示

这个问题有什么解决办法吗?

【问题讨论】:

标签: r list dataframe time


【解决方案1】:

如果Daily_Streanflow 为空,则您的测试无法正确测试:

> Daily_Streamflow <- NULL
> nrow(Daily_Streamflow) > 0
logical(0)

你可以使用

> is.null(Daily_Streamflow)
[1] TRUE

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 2018-08-12
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    相关资源
    最近更新 更多