2013-10-15 38 views
0

示例代码:保持最大值在范围R

x <- c(10,15,21,24,32,48,56,78,87,98) 
y <- c(2,3,4,5,2.1,3.1,1,1.5,1.9,2.6) 
df <- data.frame(x,y) 
df 

对不起即时通讯相对较新的编码。昨天晚上我得到了一些帮助,通过找到每10个单位片段中最大的Y来缩小大数据帧,但结果可能导致错误。

我很抱歉我对编程一般还比较陌生。

所以,我有一个阈值说,y> 1.91。我如何在X中给出10个单位范围内的最大Y?所以,我的想法是,我会找到max(y)>阈值,然后删除10个单位内的所有x行。然后找到第二高的y(必须大于阈值)并删除10个单位内的所有x。我会这样做,直到我有一个列表中的所有值超过阈值和至少10个单位的对方。

你们可以帮我编码吗?

+2

你试过了什么?我的意思是,你几乎在编写有效的代码 - R是交互式的。尝试一下,看看结果是什么 - 然后尝试将其与其他代码组合在一起。例如。你知道'max(y)'给出了什么,你可以看到'y> 1.91'给出了什么,你可以猜测'y [y> 1.91]给出了......等等...... – thelatemail

+0

你能给出你想要的输出结果的例子,给出你的例子'df'? – Hugh

回答

1

我不确定我理解你的问题。这是你想要做的吗?

require(data.table) 
dt <- data.table(df) 
threshold <- 1.91 
dt <- dt[y>threshold, ] 
ans <- dt[0,] 

while (nrow(dt)>0){ 
    ans <- rbindlist(list(ans, dt[which.max(y),])) 
    xval <- ans[nrow(ans),x] 
    dt <- dt[x<(xval-10)|x>(xval+10)] 
} 
ans