聚合而不减少数据框的维度
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
我想在 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