概要
tidyr
パッケージに含まれるuncount()
は、任意の行を複製する関数です。逆操作を行うcount()
が存在します。
関連ページ
関数
tidyr::uncount(data, weights, .remove = TRUE, .id = NULL)
引数 | 指定 | 説明 |
---|---|---|
data | 必須 | データフレーム |
weights | 必須 | 複製する行数を列名または正の値で指定する |
.remove | 任意 | weightsで指定した列を複製後に削除したくない場合はFALSEを指定する |
.id | 任意 | 複製後の行に連番を追加する場合は任意の列名を指定する |
使い方
解説用データフレーム
df <- tibble(
x1 = c('A', 'B'),
x2 = c(2, 3)
)
> df
# A tibble: 2 x 2
x1 x2
<chr> <dbl>
1 A 2
2 B 3
1.行の複製
1-1.行数を列で指定する
# 列x2の値だけ行を複製する
uncount(df, weight = x2)
# A tibble: 5 x 1
x1
<chr>
1 A
2 A
3 B
4 B
5 B
1-2.行数を任意の数で指定する
# 全ての行を2行に複製する
uncount(df, weight = 2)
# A tibble: 4 x 2
x1 x2
<chr> <dbl>
1 A 2
2 A 2
3 B 3
4 B 3
2.オプション
2-1.行数を指定した列を残す
# 列x2の値だけ行を複製する
uncount(df, weight = x2, .remove = FALSE)
# A tibble: 5 x 2
x1 x2
<chr> <dbl>
1 A 2
2 A 2
3 B 3
4 B 3
5 B 3
2-2.複製した行に連番を振る
# 列x2の値だけ行を複製し、列y1に連番を格納する
uncount(df, weight = x2, .id = 'y1')
# A tibble: 5 x 2
x1 y1
<chr> <dbl>
1 A 1
2 A 2
3 B 1
4 B 2
5 B 3