R rbind - номера столбцов аргументов не совпадают

Как я могу игнорировать набор данных, если в нем не существует некоторых имен столбцов?

У меня есть список данных о погоде из потока, но я думаю, что некоторые ключевые погодные условия не существуют, и поэтому у меня есть эта ошибка ниже с rbind:

Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match 

Мой код:

weatherDf <- data.frame()

for(i in weatherData) {
    # Get the airport code.
    airport <- i$airport

    # Get the date.
    date <- as.POSIXct(as.numeric(as.character(i$timestamp))/1000, origin="1970-01-01", tz="UTC-1")

    # Get the data in dailysummary only.
    dailySummary <- i$dailysummary

    weatherDf <- rbind(weatherDf, ldply(
        list(dailySummary),
        function(x) c(airport, format(as.Date(date), "%Y-%m-%d"), x[["meanwindspdi"]], x[["meanwdird"]], x[["meantempm"]], x[["humidity"]])
    ))
}

Итак, как я могу убедиться, что в данных существуют следующие ключевые условия:

meanwindspdi
meanwdird
meantempm
humidity

Если какой-либо из них не закрывается, то игнорировать группу из них. Является ли это возможным?

ИЗМЕНИТЬ:

Содержимое WeatherData находится в jsfiddle (я не могу опубликовать его здесь, так как оно слишком длинное, и я не знаю где лучше всего показывать данные публично для R...)

РЕДАКТИРОВАТЬ 2:

Я получаю некоторую ошибку, когда пытаюсь экспортировать данные в txt:

> write.table(weatherData,"/home/teelou/Desktop/data/data.txt",sep="\t",row.names=FALSE)
Error in data.frame(date = list(pretty = "January 1, 1970", year = "1970",  : 
  arguments imply differing number of rows: 1, 0

Что это значит? Похоже, что в данных есть ошибки...

ИЗМЕНИТЬ 3:

Я экспортировал все свои данные в .RData на свой диск Google:

https://drive.google.com/file/d/0B_w5RSQMxtRSbjdQYWJMX3pfWXM/view?usp=sharing

Если вы используете RStudio, вы можете просто импортировать данные.

ИЗМЕНИТЬ 4:

target_names <- c("meanwindspdi", "meanwdird", "meantempm", "humidity")

# If it has data then loop it.
if (!is.null(weatherData)) {
    # Initialize a data frame.
    weatherDf <- data.frame()

    for(i in weatherData) {
        if (!all(target_names %in% names(i)))
            next

        # Get the airport code.
        airport <- i$airport

        # Get the date.
        date <- as.POSIXct(as.numeric(as.character(i$timestamp))/1000, origin="1970-01-01", tz="UTC-1")

        # Get the data in dailysummary only.
        dailySummary <- i$dailysummary

        weatherDf <- rbind(weatherDf, ldply(
            list(dailySummary),
            function(x) c(airport, format(as.Date(date), "%Y-%m-%d"), x[["meanwindspdi"]], x[["meanwdird"]], x[["meantempm"]], x[["humidity"]])
        ))
    }

    # Rename column names.
    colnames(weatherDf) <- c("airport", "key_date", "ws", "wd", "tempi", 'humidity')

    # Convert certain columns weatherDf type to numberic.
    columns <-c("ws", "wd", "tempi", "humidity")
    weatherDf[, columns] <- lapply(columns, function(x) as.numeric(weatherDf[[x]]))
}

Осмотрите weatherDf:

> View(weatherDf)
Error in .subset2(x, i, exact = exact) : subscript out of bounds

person laukok    schedule 17.01.2017    source источник
comment
Попробуйте dput(head(weatherData, 50)) для обмена данными.   -  person nrussell    schedule 17.01.2017
comment
@nrussell Я делюсь всеми своими данными в jsfiddle. пожалуйста, смотрите мое редактирование выше. Спасибо.   -  person laukok    schedule 17.01.2017
comment
Я не получаю никаких ошибок, когда запускаю ваш код???   -  person G5W    schedule 17.01.2017
comment
Вы хотите пропустить текущую итерацию цикла, если какой-либо из столбцов отсутствует в i?   -  person Sven Hohenstein    schedule 17.01.2017
comment
@SvenHohenstein да. это то, о чем я могу думать. если у вас есть идея получше??   -  person laukok    schedule 17.01.2017
comment
@ G5W, это интересно! не знаю почему у меня ошибка!! :-(   -  person laukok    schedule 17.01.2017
comment
@ G5W извините, я знаю почему - я дал неверные данные! данные, которые не работают, слишком длинные, и я даже не могу просмотреть их на своей консоли rstudio! Любые идеи, как я могу вывести его другими методами??   -  person laukok    schedule 17.01.2017


Ответы (1)


Вы можете использовать next, чтобы пропустить текущую итерацию цикла и перейти к следующей итерации:

target_names <- c("meanwindspdi", "meanwdird", "meantempm", "humidity")

for(i in weatherData) {
  if (!all(target_names %in% names(i)))
    next
  # continue with loop...
person Sven Hohenstein    schedule 17.01.2017
comment
Спасибо за ответ. Но это больше не дает мне никаких данных... см. мое редактирование 4. Все мои данные экспортированы в редактировании 3. - person laukok; 17.01.2017
comment
@teelou Имена целей отсутствуют ни в одном из фреймов данных в weatherData. Поэтому все итерации пропускаются. - person Sven Hohenstein; 19.01.2017