我是否可以在不更改其他列的情况下,在R上的特定列条件下仅在特定列中聚合行?

我是否可以在不更改其他列的情况下,在R上的特定列条件下仅在特定列中聚合行?,r,dataframe,group-by,aggregate,tidy,R,Dataframe,Group By,Aggregate,Tidy,假设您有一个大的df,并且您想要一种简单快速的方法从df(一个大的R数据帧)获取df1: 其思想是聚合(通过求和)具有相同索引和相同var1的行,而不更改其他行。请注意,每个索引var2组合的var4是相同的 df1: index var1 var2 var3 var4 0 2 4 8 7 1 2 3 9 6 2 1 5 17 8 2 2 9 5

假设您有一个大的df,并且您想要一种简单快速的方法从df(一个大的R数据帧)获取df1:

其思想是聚合(通过求和)具有相同索引和相同var1的行,而不更改其他行。请注意,每个索引var2组合的var4是相同的

df1: 

index  var1  var2  var3  var4
  0      2     4     8     7
  1      2     3     9     6
  2      1     5    17     8
  2      2     9    50    10
  3      3     6     6     9
  3      4     7    11    10

您可以使用
rowsum
按总和进行聚合

或使用聚合:

aggregate(var3 ~ ., x, sum)
#  index var1 var2 var4 var3
#1     1    2    3    6    9
#2     0    2    4    7    8
#3     2    1    5    8   17
#4     3    3    6    9    6
#5     3    4    7   10   11
#6     2    2    9   10   50
数据:


x您可以使用
rowsum
按总和进行聚合

或使用聚合

aggregate(var3 ~ ., x, sum)
#  index var1 var2 var4 var3
#1     1    2    3    6    9
#2     0    2    4    7    8
#3     2    1    5    8   17
#4     3    3    6    9    6
#5     3    4    7   10   11
#6     2    2    9   10   50
数据:


x也许您可以使用
aggregate()
如下

v <- aggregate(df[-(1:2)], df[1:2], function(x) sum(unique(x)))
res <- v[order(v$index),]

也许您可以使用
aggregate()
,如下所示

v <- aggregate(df[-(1:2)], df[1:2], function(x) sum(unique(x)))
res <- v[order(v$index),]

您只想汇总列
var3
?若其他列在聚合上不是唯一的,或者每个组都是唯一的,那个么其他列应该怎么办?是关于如何对一列求和,并按另一列分组。你的问题是如何对m列求和,按n个其他列(m和n>1)分组,但大多数答案也可以用于你的情况(m和n>1)。是的@GKi,其他列是唯一的。每var1组。另外,这是IceCreamToucan的说法,按其他n列(m和n>1)分组,OK。然后您还可以使用它们进行分组,以将它们保留在输出中。您只想对列
var3
求和吗?若其他列在聚合上不是唯一的,或者每个组都是唯一的,那个么其他列应该怎么办?是关于如何对一列求和,并按另一列分组。你的问题是如何对m列求和,按n个其他列(m和n>1)分组,但大多数答案也可以用于你的情况(m和n>1)。是的@GKi,其他列是唯一的。每var1组。另外,这是IceCreamToucan的说法,按其他n列(m和n>1)分组,OK。如果
var3
在一个组中多次持有相同的值,那么可能会出现意外的
sum
@GKi……我想OP只是想保留重复项,而不是将它们相加,所以我使用了
sum(unique(x))
,但我不确定输出的规则是什么@ThomasIsCoding,我在获取其余的列时遇到了麻烦。如果
var3
在一个组中多次持有相同的值,那么可能会出现意外的
sum
@GKi好吧……我想OP只是想保留重复项,而不是将它们相加,所以我使用了
sum(unique(x))
,但不确定outputHanks@ThomasIsCoding的规则,我在获取其余列时遇到了麻烦。
v <- aggregate(df[-(1:2)], df[1:2], function(x) sum(unique(x)))
res <- v[order(v$index),]
> res
  index var1 var2 var3 var4
2     0    2    4    8    7
3     1    2    3    9    6
1     2    1    5   17    8
4     2    2    9   50   10
5     3    3    6    6    9
6     3    4    7   11   10