如何重复空行,以便每个拆分具有相同的编号

Ril*_*n42 3 r dataframe

我的目标是为每个拆分获得相同的行数(基于列Initial).我试图基本填充行数,以便每个人具有相同的数量,同时保留初始列,以便我可以区分它们.我的尝试彻底失败了.有人有建议吗?

df<-data.frame(Initials=c("a","a","b"),data=c(2,3,4))
attach(df)

maxrows=max(table(Initials))+1
arr<-split(df,Initials)
lapply(arr,function(x){
  toadd<-maxrows-dim(x)[1]
  replicate(toadd,x<-rbind(x,rep(NA,1)))#colnames -1 because col 1 should the the same Initial
})
Run Code Online (Sandbox Code Playgroud)

目标:

a 2
a 3
b 4
b NA
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 5

使用data.table ...

my_rows <- seq.int(max(tabulate(df$Initials)))

library(data.table)
setDT(df)[ , .SD[my_rows], by=Initials]

#    Initials data
# 1:        a    2
# 2:        a    3
# 3:        b    4
# 4:        b   NA
Run Code Online (Sandbox Code Playgroud)

.SD是与每组相关的D ata 的S ubset .我们可以对其行进行子集化,与需要额外逗号的data.frame不同.by=.SD[row_numbers]DF[row_numbers,]

dplyr中的类似物是

my_rows <- seq.int(max(tabulate(df$Initials)))

library(dplyr)
setDT(df) %>% group_by(Initials) %>% slice(my_rows)

#   Initials  data
#     (fctr) (dbl)
# 1        a     2
# 2        a     3
# 3        b     4
# 4        b    NA
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这只有df在data.table时才有效.我已经用dplyr提交了报告/查询.dplyr开发人员很有可能会在将来的版本中阻止这种用法.

  • 她是个漂亮的人,Clark! (3认同)