的一種方式做,這是首先創建一個分組變量。這個變量將允許我們將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
的實際值並不重要。我們只需要確保一次獲得三排。
接下來,我們只是在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