1

次のような data.frame があります。

df <- data.frame(names=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"), 
                 values=c(1,1,4,6,7,7,7,9,9,14,15))

そして、私はこれに似たものが欲しいです:

df <- data.frame(names=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"), 
                 values=c(1,1,2,3,4,4,4,5,5,6,7))

ばかげた質問であることはわかっていますが、その方法がわかりません。ありがとう

注: 2 番目の data.frame の値は、1 から n までの順序である必要があります

4

3 に答える 3

7

使用できますcumsum

df <- transform(df, values = cumsum(c(1, head(values, -1) != tail(values, -1))))

理解しやすいかもしれない別のバージョンですが、少し遅いと思います:

df<- transform(df, values = cumsum(c(1, diff(values) != 0))
于 2013-07-29T16:58:39.980 に答える
1

別のオプションは、 factor に変換し、そこから順序を抽出することです。

df$values = as.numeric(as.factor(df$values))
于 2013-07-29T18:26:59.767 に答える