聚合而不减少数据框的维度

Aggregrate without reducing dimension of dataframe

我想在 R 中使用聚合函数,我希望输出数据框的维度保持不变。例如:假设我有以下数据框

Name------Type------    Price   
Prod1-----A--------       
Prod2----A---------       
Prod3----B----------       
Prod4-----B---------       

在 R 中通过聚合类型和函数作为价格总和来使用聚合函数后。我得到以下结果:

Type-------Value
A-----------6
B-----------16 

但是,我希望数据框的维度保持不变。例如:

Name-----Type----Price----Value  
Prod1----A--------------
Prod2----A---------------
Prod3----B---------------
Prod 4----B---------------

我不想为此应用程序使用循环。请建议任何其他方法。

我们可以使用 ave 来自 base R

df1$Value <- with(df1, paste0("$", ave(as.numeric(sub("[$]", "", Price)), 
                          Type, FUN = sum)))
df1$Value
#[1] ""  ""  "" ""

使用dplyr,

library(dplyr)
df %>% 
  group_by(Type) %>% 
  mutate(Value = sum(Price))

或使用data.table

library(data.table)
setDT(df)[, Value := sum(Price), by = Type]

#    Name Type Price Value
#1:   P1    A     1     6
#2:   P1    A     5     6
#3:   P3    B     7    16
#4:   P4    B     9    16