2016-06-16 3 views
2

Rで集計関数を使用しようとしていますが、出力データフレームの次元を変更しないでください。例:のは、私は価格の合計としてタイプおよび機能に集約することで、Rでの集計関数を使用した後、次のデータフレームデータフレームの次元を縮小しない集計

Name------Type------ Price 
Prod1-----A--------  $1 
Prod2----A---------  $5 
Prod3----B----------  $7 
Prod4-----B---------  $9 

があるとしましょう。私は以下の結果を得ます:

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

しかし、私はデータフレームの次元を同じにしておきたいと思います。例:

Name-----Type----Price----Value 
Prod1----A-------$1-------$6 
Prod2----A-------$5--------$6 
Prod3----B--------$7-------$16 
Prod 4----B-------$9--------$16 

このアプリケーションではループを使用しません。これを行う他の方法を提案してください。

+0

なぜあなたは正確に予想される出力である(私の解決策を不受理しましたあなたが示した)?あなたが '$ '記号なしで見せてくれたら、私はそれをしたでしょう。これは、やりすぎ。 – akrun

答えて

2

からaveを使用することができます

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 
5

我々は

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

またはdata.tableを使用して、dplyrを使用してbase R

df1$Value <- with(df1, paste0("$", ave(as.numeric(sub("[$]", "", Price)), 
          Type, FUN = sum))) 
df1$Value 
#[1] "$6" "$6" "$16" "$16" 
関連する問題