Я ищу подмножество фрейма данных в R. Мой синтаксис явно неправильный (т.е. выдает неправильные результаты).
data[i,]$m_cnt <- nrow(w_data[
w_data$direction >= data[i,]$min_a &
w_data$direction < data[i,]$max_a &
w_data$windspeed >= 3 &
w_data$windspeed < 15,
])/records;
Аналогичный вопрос: Фильтрация data.frame
Элемент w_data data.frame (упрощенный для краткости) состоит из данных временного ряда скорости ветра и направления ветра.
time_stamp windspeed direction
2010-06-01 00:00 12.2 125
2010-06-03 02:50 17.4 312
2010-06-05 21:30 2.1 132
2010-06-12 15:10 7.8 71
2010-06-22 17:40 2.6 307
2010-06-30 03:20 5.1 310
Предполагается, что приведенный выше оператор R подсчитывает количество записей в пределах определенного диапазона направления ветра, например, в таких случаях >=120°
и <135°
и в пределах определенного диапазона скорости ветра.>=3m/s
и <15m/s
.Затем счетчик преобразуется в процент от общего числа выполненных измерений, поэтому приведенный выше пример должен быть равен 1 записи из 6 = 16,66%.Процент затем записывается в другой data.frame (данные), который имеет структуру:
min_a max_a l_cnt m_cnt h_cnt
0 15 0 0 0
15 30 0 0 0
30 45 0 0 0
45 60 0 0 0
60 75 0 0.1666 0
75 90 0 0 0
90 105 0 0 0
105 120 0 0 0
120 135 0.1666 0.1666 0
135 150 0 0 0
150 165 0 0 0
165 180 0 0 0
180 195 0 0 0
195 210 0 0 0
210 225 0 0 0
225 240 0 0 0
240 255 0 0 0
255 270 0 0 0
270 285 0 0 0
285 300 0 0 0
300 315 0.1666 0.1666 0.1666
315 330 0 0 0
330 345 0 0 0
345 360 0 0 0
Проблема, с которой я сталкиваюсь, состоит в том, что сумма всех процентов не равна 100% (в этом примере это так, ноя не запускаю свой сценарий для 10 000 записей).
У меня также были странные результаты, такие как:
data[i,]$l_cnt <- nrow(w_data[
w_data$direction >= data[i,]$min_a &
w_data$direction < data[i,]$max_a &
w_data$windspeed <= 3,
])/records;
data[i,]$m_cnt <- nrow(w_data[
w_data$direction >= data[i,]$min_a &
w_data$direction < data[i,]$max_a &
w_data$windspeed <= 15,
])/records;
data[i,]$h_cnt <- nrow(w_data[
w_data$direction >= data[i,]$min_a &
w_data$direction < data[i,]$max_a &
w_data$windspeed > 15,
])/records;
Производит итоговые значения:
l_cnt 0,360637343
m_cnt 0,187836625
h_cnt 0,811938959
total 1,360412926
Но если я квалифицирую вычисление m_cnt больше чем и меньше чем, то есть:
data[i,]$m_cnt <- nrow(w_data[
w_data$direction >= data[i,]$min_a &
w_data$direction < data[i,]$max_a &
w_data$windspeed >= 3 &
w_data$windspeed < 15,
])/records;
, я получу:
l_cnt 0
m_cnt 0,360637343
h_cnt 0,811938959
total 1,172576302