0

我想为数据框的新列提供一系列数字。但是此序列将根据另一列中的值重复多次。(即它从 1 开始,直到该特定值将更改为其他值)。

我的问题是如何定义 r 中每个序列的终点。

我打算添加的包含“V2”列的数据框的一部分:

  V1      V2(new added column with sequential numbers)           
  12      1
  12      2
  12      3
  12      4
  12      5
  13      1
  13      2
  13      3
  13      4
  13      5
  13      6
  14      1
  14      2
  14      3
  14      4

我尝试使用以下代码,但不起作用!

count <- table(df$V1)
c <- as.integer(names(count)[df$V1==12])
    repeat{
      df$V2<- seq(1,c, by=1)
      if(df$V1!=12){
        break
      }
    }
4

3 回答 3

1

听起来您可能正在寻找,rle因为您对“V1”变量更改的任何时候都感兴趣。

尝试以下操作:

> sequence(rle(df$V1)$lengths)
 [1] 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4
于 2014-04-11T09:03:21.270 回答
0

好吧,阿南达打败了我的努力:

vec = numeric(0)
for(i in unique(df$V1)){
  n = length(df$V1[df$V1 == i])
  vec = c(vec, 1:n)
}
于 2014-04-11T09:08:21.277 回答
0

rle 是一个非常好的解决方案,但您也可以使用 ave:

tab$V2 <- ave(tab$V1, tab$V1, FUN=seq_along)

hth

于 2014-04-11T09:18:24.820 回答