3

1666 行のデータ フレームがあります。相互検証を行う1:5ために使用する繰り返しシーケンスを持つ列を追加したいと思います。cut()次のようになります。

   Y      x1       x2       Id1
   1      .15      3.6       1
   0      1.1      2.2       2
   0      .05      3.3       3
   0      .45      2.8       4
   1      .85      3.1       5
   1      1.01     2.9       1
  ...      ...     ...      ...

次の2つの方法を試しましたが、完全なseq()引数の増分で数字を追加するだけのように見えるため、エラーメッセージが表示されます:

>   tr2$Id1 <- rep(seq(1,5,1), (nrow(tr2)/5))
Error in `$<-.data.frame`(`*tmp*`, "Id", value = c(1, 2, 3, 4, 5, 1, 2,  : 
  replacement has 1665 rows, data has 1666
>   tr2$Id1 <- rep(seq(1,5,1), (nrow(tr2)/5) + (nrow(tr2)%%5))
Error in `$<-.data.frame`(`*tmp*`, "Id", value = c(1, 2, 3, 4, 5, 1, 2,  : 
  replacement has 1670 rows, data has 1666

助言がありますか?

4

2 に答える 2

6

または([の]の「より高速な簡略化バージョン」 )のlength.out引数を使用します。rep()rep_lenrep

length.out:非負の整数。出力ベクトルの目的の長さ

組み込みのデータセットカーを使用した例を次に示します。

str(cars)
'data.frame':   50 obs. of  2 variables:
 $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : num  2 10 4 22 16 10 18 26 34 17 ...

グループ化列を追加します。

cars$group <- rep(1:3, length.out = 50L)

結果を調べます。

head(cars)
  speed dist group
1     4    2     1
2     4   10     2
3     7    4     3
4     7   22     1
5     8   16     2
6     9   10     3

tail(cars)
   speed dist group
45    23   54     3
46    24   70     1
47    24   92     2
48    24   93     3
49    24  120     1
50    25   85     2
于 2012-08-06T13:48:04.183 に答える
3

このようなもの?

df <- data.frame(rnorm(1666))
df$cutter <- rep(1:5, length.out=1666)

tail(df)
     rnorm.1666. cutter
1661  0.11693169      1
1662 -1.12508091      2
1663  0.25441847      3
1664 -0.06045037      4
1665 -0.17242921      5
1666 -0.85366242      1
于 2012-08-06T13:47:51.267 に答える