如何在满足条件时添加空行或NA行

时间:2018-01-17 01:42:58

标签: r

我有以下data.frame here。在CYC列中,我有一个属于ID列的序列。当ID列中的名称发生变化时,CYC列中的序列将以1开头。我的问题是:当序列以2开头时,如何在NA's上方插入2行?如果序列以NA3行开头,如果序列以3 NA开头,则此解决方案应足够健壮以处理插入两个4行,依此类推。是否可以将ID列中的示例名称添加到插入的NA行,以填充CYC列中序列的开头? CYC列的预期结果示例如下:

   CYC
1   NA
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  10
11  11
12  12
13  13
14  14
15  15

2 个答案:

答案 0 :(得分:1)

为了保持这种自包含,我们在结尾处的注释中使用数据DF。{/ 1}}。

我们使用THB381处理每个by,分别生成IDID的数据框,从{1}到最后CYC CYC 1}}。然后ID这样产生的数据帧。最后,我们将其与原始数据框合并。没有包使用。

rbind

,并提供:

merge(DF, 
      do.call("rbind", by(DF, DF$ID, with, data.frame(ID = ID[1], CYC = 1:tail(CYC, 1)))), 
      all = TRUE)

注意

       ID CYC POS COUNTS2 CTIME_mins
1  THB381   1  NA      NA         NA
2  THB381   2  40     206   100.0297
3  THB381   3  40     212   100.0297
4  THB381   4  40     204   100.0296
5  THB381   5  40     186   100.0297
6  THB381   6  40     177   100.0297
7  THB381   7  40     195   100.0297
8  THB381   8  40     189   100.0130
9  THB381   9  40     195   100.0297
10 THB381  10  40     184   100.0297
11 THB381  11  40     209   100.0296
12 THB381  12  40     194   100.0297
13 THB381  13  40     197   100.0297
14 THB381  14  40     194   100.0297

答案 1 :(得分:0)

library('tidyverse')

df <- tribble(
       ~ID, ~CYC, ~COUNTS,
    'WSTD',    1,       1,
    'WSTD',    2,       2,
      'S1',    2,       3,
      'S1',    3,       4,
      'S1',    4,       5,
  'THB381',    3,       6
)

我们希望获得一个包含ID和CYC所需组合的数据框。我们可以使用列表列和unnest来完成此操作。

cycs <- df %>%
  group_by(ID) %>%
  summarise(CYC = list(seq_len(max(CYC)))) %>%
  unnest

然后只需right_join到原始数据框,缺少的行将填充NA s。

right_join(df, cycs)
#> Joining, by = c("ID", "CYC")
#> # A tibble: 9 x 3
#>       ID   CYC COUNTS
#>    <chr> <dbl>  <dbl>
#> 1     S1     1     NA
#> 2     S1     2      3
#> 3     S1     3      4
#> 4     S1     4      5
#> 5 THB381     1     NA
#> 6 THB381     2     NA
#> 7 THB381     3      6
#> 8   WSTD     1      1
#> 9   WSTD     2      2