1
我正在寻找在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;
类似的问题:Filtering a 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
。然后将计数转换为所采用测量总数的百分比,所以上面的例子应该等于6 = 16.66%中的1个记录。然后百分比被记录到另一个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
'['和'$'子集的奇组合。例如'[我,“h_cnt”]'有什么问题?什么是错误的结果和预期的结果,你的数据是什么样的。可重复的例子? –
除了Gavin提到的子集划分之外,你的语法看起来像是有效的R.如果你在开始之前创建另一个数据集w_data_3_15 <子集(w_data,windspeed> = 3&windspeed <15)',你的代码将更快更干净循环。 –
@Gavin我添加了更多信息 – klonq