英語は私の母国語ではないので、質問の仕方が正確にはわかりません。私が欲しいのは、それぞれの一意のid
行を13回-8 to 4
複製し、以前に複製された13行を埋めるための値の範囲の行を含む新しい列を作成することです。私のサンプルデータと期待されるデータは、より良い説明を提供すると思います。
サンプルデータ:
data <- data.frame(id = seq(1,100,1),
letters = sample(c("A", "B", "C", "D"), replace = TRUE))
> head(data)
id letters
1 1 A
2 2 B
3 3 B
4 4 C
5 5 A
6 6 B
期待されるデータ:
newcol id letters
1 -8 1 A
2 -7 1 A
3 -6 1 A
4 -5 1 A
5 -4 1 A
6 -3 1 A
7 -2 1 A
8 -1 1 A
9 0 1 A
10 1 1 A
11 2 1 A
12 3 1 A
13 4 1 A
14 -8 2 B
15 -7 2 B
16 -6 2 B
17 -5 2 B
したがって、列内の一意の行ごとに、-8から4の範囲の値(つまり13の異なる値)を持つ新しい列を作成したいと思いid
ます。また、可能であれば、data.tableパッケージを使用してベースRでそれを行う方法を知りたいと思います。
文法が下手でごめんなさい。
使用できます uncount
library(tidyr)
library(dplyr)
data %>%
uncount(13) %>%
group_by(id) %>%
mutate(newcol = -8:4) %>%
ungroup
またはで base R
data1 <- data[rep(seq_len(nrow(data)), each = 13),]
data1$newcol <- -8:4
またはを使用して data.table
library(data.table)
setDT(data)[rep(seq_len(.N), each = 13)][, newcol := rep(-8:4, length.out = .N)][]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加