行の複製

概要

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
Sponsored Link