これを行う1つの方法は、最初のグループ化変数を作成することです。この変数は、我々のグループにデータセットsplit
を与え、平均を見つけることを可能にする。その後、手段とそのIDを新しいデータフレームに組み込むことができます。
まず、グループ化変数から始めましょう。これを行うには、係数%%
を利用します。
set.seed(9025)
df = data.frame(id=1:10, values=sample(1:100, 10, FALSE))
df$group = df$id - (df$id %% -3)
df
id values group
1 1 85 3
2 2 2 3
3 3 93 3
4 4 47 6
5 5 90 6
6 6 1 6
7 7 27 9
8 8 57 9
9 9 81 9
10 10 3 12
ここで、グループ変数でsplit
を指定することができます。
dl = split(df, df$group)
dl
$`3`
id values group
1 1 85 3
2 2 2 3
3 3 93 3
$`6`
id values group
4 4 47 6
5 5 90 6
6 6 1 6
$`9`
id values group
7 7 27 9
8 8 57 9
9 9 81 9
$`12`
id values group
10 10 3 12
split
ちょうど私たちはそれを養う変数でデータフレームを分割します。したがって、最初のデータフレームはdf
のサブセットにすぎず、df$group
は3になります。df$group
という実際の値は、使用しないので問題になりません。私たちは一度に3つの行を確実に取得する必要がありました。
次に、我々list
オーバーだけループし、平均
means = unname(sapply(dl, function(x) mean(x$values), simplify=TRUE))
means
60 46 55 3
を計算し、最後に、私たちは新しいデータフレームにそれを回します。要約すると
n = length(means)
new_df = data.frame(id=1:n, mean=means)
new_df
id mean
1 1 60
2 2 46
3 3 55
4 4 3
、アルゴリズムは次のようになります。
df$group = df$id - (df$id %% -3)
dl = split(df, df$group)
means = unname(sapply(dl, function(x) means(x$values), simplify=TRUE)
n = length(means)
new_df = data.frame(id=1:n, mean=means)
RとのStackOverflowへようこそ!あなたはすでに試したことのいくつかの例を提供していれば、人々が多くのことを喜んで質問に答えるのを助けることができます。それで、そのことを念頭に置いて、これらの質問を解決する方法についてのあなたの最初の考えは何ですか?ここでのコメントではなく、質問に最もよく答えます。 – brittenb
提案していただきありがとうございます@brittenb – Wolkuz