【问题标题】:Extracting rows in a loop using a range of time使用时间范围在循环中提取行
【发布时间】:2021-06-06 16:05:55
【问题描述】:

我有一个如下所示的数据集:

data <- data.frame(Time = c(1, 3, 4, 6, 7, 10, 11, 12, 16, 19, 21, 23, 26, 27, 30),
                   Value = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15))

Time  Value
 1     1
 3     2
 4     3
 6     4
 7     5
10     6
11     7
12     8
16     9
19    10
21    11
23    12
26    13
27    14
30    15

现在,对于 Time 变量中的每 5 秒,我想提取/过滤前 2 秒的所有值(并去掉最后 3 秒),如下所示:

Time Value
 1     1
 6     4
 7     5
 11    7
 12    8
 16    9
 21    11
 26    13
 27    14

我认为代码将使用for loops 看起来像这样:

for(every 2 seconds in Time variable){
     new_data <- filter(the first 2 seconds) 
}

非常感谢!

【问题讨论】:

  • 你能提供预期的结果吗?你尝试了什么?
  • @Waldi,我已经编辑了我的问题以使其更有意义

标签: r for-loop filter dplyr


【解决方案1】:

这能回答你的问题吗?

n <- 5
first <- 2

data[(data$Time-1)%%n<first,]

   Time Value
1     1     1
4     6     4
5     7     5
7    11     7
8    12     8
9    16     9
11   21    11
13   26    13
14   27    14

【讨论】:

    【解决方案2】:

    一个整洁的选项。

    library(dplyr)
    
    data %>%
      mutate(inFive = ceiling(Time/5)) %>%
      group_by(inFive) %>%
      filter(Time %% 5 %in% 1:2) %>%
      ungroup() %>%
      select(-inFive)
    
    # # A tibble: 9 x 2
    #    Time Value
    #   <dbl> <dbl>
    # 1     1     1
    # 2     6     4
    # 3     7     5
    # 4    11     7
    # 5    12     8
    # 6    16     9
    # 7    21    11
    # 8    26    13
    # 9    27    14
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多