【发布时间】:2013-12-28 02:23:57
【问题描述】:
这可能是一个简单的问题,但我一直无法找到答案。我的问题是如何根据可变行长添加索引列。例如,在下面的数据框中,我试图添加第三列,每次切换序列时,索引号都会增加。采样序列 6:29 = Setnum 1、34:50 = Setnum 2、56:79 = Setnum 3、84:100 = Setnum 4 等
Sample <- rep(c(6:29, 34:50, 56:79, 84:100, 106:129, 134:150), each=1, times=8)
set.seed(123)
randdf <- data.frame(area = round(rnorm(984, mean = 1000000, sd = 100000)), Sample)
我希望结束的是每个样本序列的运行计数,直到数据帧结束,无论样本序列集的数量如何。
Sample Setnum area
6 1
7 1
... 1
29 1
34 2
35 2
... 2
50 2
... 3...5
134 6
135 6
... 6
150 6
6 7
7 7
...
134 8
135 8
每个 Sample 序列的开始和结束编号是相同的。但是由于缺少数据,每个 Sample 序列中的观测值数量并不相同。
我认为我需要在每个 Sample 序列(6、34、56、84 等)的开头使用“split”,然后使用“cumsum”?以下代码的效果:
cumsum(randdf[,1]=="6" | "34" | "56" | "84" | etc)
IndexDF <- split(randdf, cumsum(randf[,1]=="6"| etc))
## Setnum is the name of the index column
for(i in 1:length(IndexDF)) {IndexDF[[i]] <-cbind(IndexDF[[i]],
Setnum=rep(i, nrow(IndexDF[[i]])))}
我希望我的问题很清楚。感谢您的帮助。
【问题讨论】: