【问题标题】:Extract every 11 rows from data frame [duplicate]从数据框中每11行提取一次[重复]
【发布时间】:2020-08-06 18:41:26
【问题描述】:

所以我有一个数据框,我想每 11 行获取一次。不仅是每 11 行,而且每次都有一大块 11 行,例如:

     Subject Wt Dose  Time  conc
1        1 79.6 4.02  0.00  0.74
2        1 79.6 4.02  0.25  2.84
3        1 79.6 4.02  0.57  6.57
4        1 79.6 4.02  1.12 10.50
5        1 79.6 4.02  2.02  9.66
6        1 79.6 4.02  3.82  8.58
7        1 79.6 4.02  5.10  8.36
8        1 79.6 4.02  7.03  7.47
9        1 79.6 4.02  9.05  6.89
10       1 79.6 4.02 12.12  5.94
11       1 79.6 4.02 24.37  3.28

然后是 11 行,然后是其他 11 行。

我试过了

for (i in 1:nrow(Theoph)) {
  everyEleven = Theoph[11,i]
  everyEl
}

但它只给了我前 11 行,而不是 11 行的第二块,依此类推

【问题讨论】:

  • 所以你想要一个数据帧列表,每一个 11 行?
  • 是的,我想要每 11 行,因为每 11 行中有不同的主题。例如:主题 1 在前 11 行中,然后主题 2 在接下来的 11 中,依此类推。这是因为我想为每个主题制作一个时间对抗注意力的情节。
  • 最好分配一个主题 ID。 Theoph$ID <- rep (1:m, each=11) 其中m 是主题数。有没有机会12?
  • 我不确定我是否完全理解了这个问题,但我认为您希望根据分组列每组 11 行。不清楚的是:哪 11 行(第一个最后一个,随机的......)?我的第一个答案将使用 data.table: library(data.table); x <- data.table(mtcars); x[, head(.SD, 2), by = gear] 用于每组的前 2 行(“齿轮”列)

标签: r


【解决方案1】:

我会假设你的数据框是 11*N 行那么长

everyEleven = vector(mode = "list", length = N)

for(i in 1:N){
  start = (i - 1) * 11 + 1
  end = i * 11
  everyEleven[[i]] = Theoph[start:end, ]
}

【讨论】:

    【解决方案2】:

    也许你可以试试下面的split

    everyEleven <- split(Theoph,ceiling(seq(nrow(Theoph))/11))
    

    【讨论】:

      【解决方案3】:

      试试这个改编自 [split into multiple subset of dataframes with dplyr:group_by?

      library(tibble)
      library(dplyr)  
      library(tidyr)
      
      Make an indicative dataframe as your data in the question is only 11 rows.
      
      tib <- tibble(sub = rep(1:33),
                    var = runif(33))
      
      tib1 <- 
        tib %>% 
        # create a grouping variable every 11 rows , unless there is a variable in your data which does the same. 
        mutate(grp = rep(1:3, each = 11)) %>% 
        group_by(grp) %>%
        nest()%>%
        select(data) %>%
        unlist(recursive = FALSE)
      
      
      

      给你:

      $data1
      # A tibble: 11 x 2
           sub   var
         <int> <dbl>
       1     1 0.258
       2     1 0.337
       3     1 0.463
       4     1 0.856
       5     1 0.466
       6     1 0.701
       7     1 0.548
       8     1 0.999
       9     1 0.454
      10     1 0.292
      11     1 0.173
      
      $data2
      # A tibble: 11 x 2
           sub   var
         <int> <dbl>
       1     2 0.148
       2     2 0.487
       3     2 0.246
       4     2 0.279
       5     2 0.130
       6     2 0.730
       7     2 0.312
       8     2 0.935
       9     2 0.968
      10     2 0.745
      11     2 0.485
      
      $data3
      # A tibble: 11 x 2
           sub        var
         <int>      <dbl>
       1     3 0.141     
       2     3 0.200     
       3     3 0.00000392
       4     3 0.993     
       5     3 0.644     
       6     3 0.334     
       7     3 0.567     
       8     3 0.817     
       9     3 0.0342    
      10     3 0.718     
      11     3 0.527   
      
      

      【讨论】:

        【解决方案4】:

        由于在您提供的示例数据中有一个列Subject,我假设它代表主题ID,并且Subject只有11行具有相同的值,您可以使用

        split(Theoph, Theoph$Subject)
        

        【讨论】:

          【解决方案5】:

          我们可以使用gl来创建分组索引

          split(Theoph, as.integer(gl(nrow(Theoph), 11, nrow(Theoph))))
          

          【讨论】:

            猜你喜欢
            • 2011-12-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-19
            • 2017-02-03
            • 1970-01-01
            相关资源
            最近更新 更多