我的目标是为每个拆分获得相同数量的行(基于列 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
})
目标:
a 2
a 3
b 4
b NA
最佳答案
使用数据表...
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
.SD
是 小号 的子集D 与每个 by=
相关联的数据团体。我们可以对它的行进行子集,如 .SD[row_numbers]
, 不像 data.frame 需要一个额外的逗号 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
奇怪的是,这只适用于
df
是一个数据表。我已提交 a report/query with dplyr . dplyr 开发人员很有可能会在 future 的版本中阻止这种用法。
关于r - 如何重复空行以使每个拆分具有相同的编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045115/