You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求R语言实现风向与风速值校验的循环逻辑

Got it, let's tackle this problem step by step. Here's a straightforward, loop-based solution to implement the wind data validation you need, plus a bonus efficient alternative for larger datasets:

Wind Direction & Speed Validation Loop

First, let's assume your data frame is named weather_data (swap this with your actual data frame name if needed). Here's the simple loop implementation:

# Initialize an empty vector to track rows with errors
error_rows <- c()

# Loop through each row in the data frame
for (row_idx in 1:nrow(weather_data)) {
  # Grab values from the two target columns for the current row
  wind_dir <- weather_data$Winddirection[row_idx]
  wind_speed <- weather_data$Windspeed[row_idx]
  
  # Check for the invalid case: one value is 0, the other isn't
  if ((wind_dir == 0 && wind_speed != 0) || (wind_dir != 0 && wind_speed == 0)) {
    # Add the row index to our error tracker
    error_rows <- c(error_rows, row_idx)
    # Print the required error message
    cat(sprintf("In Line %d is an error\n", row_idx))
  }
}

# Optional: Extract all error rows into a new data frame for deeper inspection
error_records <- weather_data[error_rows, ]

Quick breakdown of the code:

  • We start with an empty vector error_rows to keep track of which rows fail the validation.
  • The for loop iterates over every row in your data frame, pulling the direction and speed values for each row.
  • The conditional checks for the invalid scenario (exactly one of the two values is 0). If triggered, we log the row index and print the error message.
  • The final optional step lets you extract all problematic rows into a separate data frame for easier review.

Bonus: Faster Vectorized Approach (For Large Datasets)

Loops can be slow in R when working with big data. Here's a more efficient vectorized alternative that avoids explicit looping:

# Identify error rows using vectorized logic (no loop needed!)
error_rows <- which(
  (weather_data$Winddirection == 0 & weather_data$Windspeed != 0) | 
  (weather_data$Winddirection != 0 & weather_data$Windspeed == 0)
)

# Print error messages if any errors exist
if (length(error_rows) > 0) {
  cat(sprintf("In Line %d is an error\n", error_rows))
}

# Extract error rows into a new data frame
error_records <- weather_data[error_rows, ]

This leverages R's built-in vectorized operations, which are much faster for large datasets while achieving the exact same result.

内容的提问来源于stack exchange,提问作者Nikolai Techow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:32:39