我的目标是为每个拆分获得相同的行数(基于列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)
使用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开发人员很有可能会在将来的版本中阻止这种用法.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |