2016-10-23 12 views
0

データカテゴリのデータを集約し、各遵守の各カテゴリのデータの合計で新しい列を作成する初心者の問題があります。R:列グループごとにデータを集計する - 各観測値の値で列を変更する

私は、次のデータが欲しい:

PIN Balance 
221 5000 
221 2000 
221 1000 
554 4000 
554 4500 
643 6000 
643 4000 

ように見えるように:

PIN Balance Total 
221 5000 8000 
221 2000 8000 
221 1000 8000 
554 4000 8500 
554 4500 8500 
643 6000 10000 
643 4000 10000 

私は集計を使用して試してみた:出力< - 総額($バランス〜DF $ PIN DF、 data = df、sum)しかし、Obsverationsの数がオフになっているので、元のデータセットにデータを戻すことができませんでした。

+4

をあなたは何を試してみましたか? – mtoto

+4

2番目の列の3番目の行が入力と出力で同じではありません。 –

答えて

2

dplyrを使用して任意の操作を行うことができます。

データフレーム dfとして、あなたのデータを使用して
library(dplyr) 
res <- df %>% group_by(PIN) %>% mutate(Total=sum(Balance)) 

::私たちは、最初group_byPIN、その後、グループ化されたBalanceの和であるmutateを使用して新しい列Total作成

df <- structure(list(PIN = c(221L, 221L, 221L, 554L, 554L, 643L, 643L 
), Balance = c(5000L, 2000L, 1000L, 4000L, 4500L, 6000L, 4000L 
)), .Names = c("PIN", "Balance"), class = "data.frame", row.names = c(NA, 
-7L)) 
## PIN Balance 
##1 221 5000 
##2 221 2000 
##3 221 1000 
##4 554 4000 
##5 554 4500 
##6 643 6000 
##7 643 4000 

を我々は期待される結果を得ます:

print(res) 
##Source: local data frame [7 x 3] 
##Groups: PIN [3] 
## 
## PIN Balance Total 
## <int> <int> <int> 
##1 221 5000 8000 
##2 221 2000 8000 
##3 221 1000 8000 
##4 554 4000 8500 
##5 554 4500 8500 
##6 643 6000 10000 
##7 643 4000 10000 

またはdata.table

library(data.table) 
setDT(df)[,Table:=sum(Balance),by=PIN][] 
## PIN Balance Total 
##1: 221 5000 8000 
##2: 221 2000 8000 
##3: 221 1000 8000 
##4: 554 4000 8500 
##5: 554 4500 8500 
##6: 643 6000 10000 
##7: 643 4000 10000 
2

sapply()条件付き和アプローチの基本R液考えてみましょう:

df <- read.table(text="PIN Balance 
       221 5000 
       221 2000 
       221 1000 
       554 4000 
       554 4500 
       643 6000 
       643 4000", header=TRUE)  

df$Total <- sapply(seq(nrow(df)), function(i){ 
    sum(df[df$PIN == df$PIN[i], c("Balance")]) 
}) 

# PIN Balance Total 
# 1 221 5000 8000 
# 2 221 2000 8000 
# 3 221 1000 8000 
# 4 554 4000 8500 
# 5 554 4500 8500 
# 6 643 6000 10000 
# 7 643 4000 10000 
関連する問題