为每个组添加行

Ben*_*Ben 3 r

我有一个数据框如下:

       Serial_number Amplification Voltage
(...)
    51    912009913    50.8258    335.965
    52    912009913    54.3855    337.966
    53    912009913    58.3014    339.959
    54    912009913    62.6758    341.956
    55    912009913    67.5537    343.965
    56    912009913    72.9996    345.965
    57    912009913    79.1489    347.964
    58    912009913    86.1111    349.965
    59    912009913    94.0453    351.957
    60    912009913    103.2320    353.957
    61    912009913    113.9780    355.964
    62    912009913    126.5830    357.964
    63    912009913    141.6830    359.963
    64    912009913    160.0800    361.962
    65    912009913    182.8440    363.955
    66    912009913    211.9870    365.957
    67    912009913    250.4290    367.965
(...)
    119    912009897    50.8925    329.968
    120    912009897    54.5503    331.969
    121    912009897    58.5886    333.968
    122    912009897    63.0918    335.968
(...)
Run Code Online (Sandbox Code Playgroud)

我想为每个添加一行,Serial_number以便我可以使用该行获取更多信息。行号/索引并不重要,但如果我可以考虑这一点,我不会声称。

我怎样才能做到这一点?

Rom*_*man 5

你可以试试

library(tidyverse)
d <- data.frame(Serial_number=gl(5, 2), Amplification=1:10, Voltage=20:11)

d %>% 
  split(.$Serial_number) %>% 
  map(~add_row(., Serial_number=unique(.$Serial_number), Amplification=NA, Voltage=NA)) %>% 
  bind_rows()
   Serial_number Amplification Voltage
1              1             1      20
2              1             2      19
3              1            NA      NA
4              2             3      18
5              2             4      17
6              2            NA      NA
7              3             5      16
8              3             6      15
9              3            NA      NA
10             4             7      14
11             4             8      13
12             4            NA      NA
13             5             9      12
14             5            10      11
15             5            NA      NA
Run Code Online (Sandbox Code Playgroud)

使用基本 R 你可以尝试

do.call("rbind", lapply(split(d, d$Serial_number), function(x) rbind(x, c(1, NA, NA))))
Run Code Online (Sandbox Code Playgroud)

当然,您可以rbind使用 Shique 评论中提到的新数据框

rbind(d,
      data.frame(Serial_number=unique(d$Serial_number), Amplification=NA, Voltage=NA))
Run Code Online (Sandbox Code Playgroud)

然后使用命令数据框d[order(d$Serial_number),]