的一种方式做,这是首先创建一个分组变量。这个变量将允许我们将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