2017-01-25 10 views
0

を作成します。私は2つのデータセットを持っているインデックスオフに基づいて列

# 1. 
user_id users frequency 
1  1  3 
2  1  1 
3  1  1 

# 2. 
user_id sum  unique 
1  2  1 
2  0  0 
3  1  1 

Iが出力画像のうち、user_idを残し、次のようになりますのでuser_idにマージが、序ファッションにUNIT1に基づいてインデックスを持つようにしたいです:

# 3. 
frequency users sum unique 
3   1  2  1 
1   2  1  1 

これを達成する方法についてのご意見はありますか?また、これらのタイプの操作を行う方法を学ぶという点で、このタイプの操作の名前ですか?

答えて

2
library(data.table) 
setDT(df)   # this step was to make it a data.table, if its a data.frame 
setDT(df1) 

# logic is : first merge both df's, then group by "frequency" columns 
df[df1][, lapply(.SD, sum), by = .(frequency), .SDcols = c("sum", "unique", "users")] 
# frequency sum unique users 
#1:   3 2  1  1 
#2:   1 1  1  2 
+0

@StuRichardsはあなたの実際のデータに答えますか?私は何かが欠けていましたか –

+0

は、データセット2を参照するデータセット1/df1を参照するdfですか? –

+0

@StuRichardsはい –

1

ここにはtidyverseを使用するオプションがあります。私たちは、「周波数」によってグループ化された2つのデータセット間のinner_joinを行うことができ、我々はsummarise_each

library(dplyr) 
inner_join(df1, df2) %>% 
     group_by(frequency) %>% 
     summarise_each(funs(sum), sum, unique, users) 
# frequency sum unique users 
#  <int> <int> <int> <int> 
#1   1  1  1  2 
#2   3  2  1  1 

またはbase Rを使用して内の変数のsumを取得し、我々は、データセットをmergeaggregate

を行います
aggregate(.~frequency, merge(df1, df2)[-1], FUN = sum) 
# frequency users sum unique 
#1   1  2 1  1 
#2   3  1 2  1 
関連する問題