【问题标题】:Extracting values from function output based on being greater than or less than根据大于或小于从函数输出中提取值
【发布时间】:2017-12-10 21:34:25
【问题描述】:

我使用此代码创建了多个函数:

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) {
  df1 <- getallT(df)
  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 值?在上述情况下,我想创建一个可以提取高于 2.00 的值的函数,这样它就会有这样的输出:

ID     Number     Time     Distance
33         4      2.02         651
33         5      2.53         502

最终,我想创建一个不同的函数来提取低于 1.00 的值,然后通过为两者的组合创建另一个不同的函数来更进一步,但我认为一旦我知道该怎么做,我就可以做到这一点第一部分!非常感谢任何回应。

【问题讨论】:

  • 你可以使用dplyr::filter(df, Time &gt; 2.00)
  • df[df$Time> 2, ]

标签: r math dataframe arithmetic-expressions


【解决方案1】:

这是您的数据框:

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))

您可以使用 filterbetween! 保留值 =2

df <- df %>% filter(!between(Time,1,2))

  ID Number Time Distance
1 33      3 0.82      305
2 33      4 2.02      651
3 33      5 2.53      502

【讨论】:

  • 我已经使用了您建议的代码,非常棒,谢谢!但是现在我遇到了一个问题,所以现在我想知道如何: A. 过滤掉 Number 4 和 5 或 B. 专门为 Number 4 和 5 创建一个不同的 Time 过滤器。我试过了A. 通过使用 filter(between(ID, 1,3) 但不起作用。如果可能的话,我宁愿和B一起去。所以类似于... 对于 ID 号 1-3:filter(!between(Time,1,2)) 对于 ID 号 1-4:filter(!between(Time 1.5,2.3)) 在同一函数内。过去一天我一直在尝试一些事情,但不断收到错误消息。
  • 如果你只想要值 df %>% filter(Time<=1)
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多