【发布时间】:2016-03-19 05:07:36
【问题描述】:
我有一系列重复的 ID,我想将它们分配给具有固定大小的组。主题 ID 以不同的频率重复,例如:
# Example Data
ID = c(101,102,103,104)
Repeats = c(2,3,1,3)
Data = data.frame(ID,Repeats)
> head(Data)
ID Repeats
1 101 2
2 102 3
3 103 1
4 104 3
我希望相同的重复 ID 留在同一组中。但是,每个组都有固定的容量(比如只有 3 个)。例如,在我想要的输出矩阵中,每组只能容纳 3 个 ID:
# Create empty data frame for group annotation
# Add 3 rows in order to have more space for IDs
# Some groups will have NAs due to keeping IDs together (I'm OK with that)
Target = data.frame(matrix(NA,nrow=(sum(Data$Repeats)+3),
ncol=dim(Data)[2]))
names(Target)<-c("ID","Group")
Target$Group<-rep(1:3)
Target$Group<-sort(Target$Group)
> head(Target)
ID Group
1 NA 1
2 NA 1
3 NA 1
4 NA 1
5 NA 2
6 NA 2
我可以将每个 ID 循环到我的目标数据框,但这并不能保证重复的 ID 将保持在同一组中:
# Loop repeated IDs the groups
IDs.repeat = rep(Data$ID, times=Data$Repeats)
# loop IDs to Targets to assign IDs to groups
for (i in 1:length(IDs.repeat))
{
Target$ID[i]<-IDs.repeat[i]
}
在上面循环的示例中,我在两个不同的组(1 和 2)中获得了相同的 ID (102),我想避免这种情况!:
> head(Target)
ID Group
1 101 1
2 101 1
3 102 1
4 102 1
5 102 2
6 103 2
相反,如果该组中没有该 ID 的空间,我希望输出查看放置 NA 的代码。
> head(Target)
ID Group
1 101 1
2 101 1
3 NA 1
4 NA 1
5 102 2
6 102 2
如果在分配 ID i 后有足够的空间,任何人都有解决方案让 ID 留在同一组中?
我认为我需要一个循环并计算该组中的 NAs,并查看 NAs>= 是否为该唯一 ID 的长度。但是,我不知道如何同时实现这一点。也许为 j 组嵌套另一个循环?
对于循环的任何帮助将不胜感激!
【问题讨论】:
标签: r loops if-statement while-loop