【发布时间】:2017-12-12 17:15:24
【问题描述】:
我已经编写了一些代码来帮助解决之前回答的问题。最初我有这个代码:
getT <- function(df, ID, Number){
df %>%
group_by(ID, Number) %>%
mutate( Distance = finish - begin) %>%
select(-begin,-finish,-symbols) %>%
nest() %>%
mutate( data = map( data, ~ filter(.x, Distance == max(Distance)))) %>%
unnest()
}
getallT <- as.data.frame(getT(df))
getTID <- function(df, ID) {
subset(x = getallT, subset = (ID))
}
它给出了这个输出:
ID Number Time Distance
33 1 2.00 870
33 2 1.98 859
33 3 0.82 305
33 4 2.02 651
33 5 2.53 502
我想通过Time 过滤它,所以我使用了这个代码(感谢下面的帖子):
getHLN <- function(df, ID) {
getallT %>% filter (ID ==id & !between(Time, 1.50, 2.10))
}
现在给出这个输出:
ID Number Time Distance
1 33 3 0.82 305
2 33 4 2.02 651
3 33 5 2.53 502
但是现在我遇到了一个问题,所以现在我想知道如何:
A. 过滤掉数字 4 和 5,以便我可以使用不同的 Time 过滤器创建一个单独的函数。稍后创建另一个不同的函数,将之前的两个函数合并为一个。
要么
B. 为同一函数中的数字 4 和 5 创建一个不同的 Time 过滤器。
我尝试通过使用 filter (getallT, Number >= 3) %>% 来做 A. 但不起作用。如果可能的话,我宁愿和B一起去。所以像...
对于 ID 号 1-3:filter(!between(Time,1,2))
对于 ID 号 4-5: filter(!between(Time 1.5,2.3)) 在同一函数中。
过去一天我一直在尝试一些事情,但不断收到错误消息,例如 Error in filter_impl(.data, quo) :
Evaluation error: operations are possible only for numeric, logical or complex types.
我一直在尝试这里的内容,但一定不能写东西,所以需要一些见解! http://genomicsclass.github.io/book/pages/dplyr_tutorial.html
这是一个示例数据集
df <- data.frame(ID=rep(33,5),
Number=1:5,
Time=c(2.00,1.98,0.82,2.02,2.53),
Distance=c(870,859,305,651,502))
任何帮助将不胜感激。
【问题讨论】:
-
你能提供一个可重现的小例子
-
请养成这样的习惯,因为您提出包含可重现数据集的问题。 stackoverflow.com/questions/5963269/…
-
我确实有忘记添加的坏习惯!糟糕,谢谢提醒!
标签: r function dataframe filter dplyr