2017-12-19 11 views
0

フィールド上の条件で集計関数と集計関数を要約する際に問題があります。グループとカウント変数を作成して変数間の関係を見つける方法は?

例:

df = tbl_df(data.frame(
    users=c("1", "1", "1", "1", "2", "2", "2", "3", "3", "4", "4", "4", "4"), 
    projects=c("100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112"), 
    from=c("0", "0", "111", "106", "111", "101", "0", "101", "0", "100", "106", "108", "0"))) 

テーブルユーザー(ユーザー)が含まれ、他のユーザからの(からの)他のプロジェクトに由来、ユーザが所有するプロジェクト(プロジェクト)、およびプロジェクト。

プロジェクトを使用して他のユーザーとの関係がより豊かなユーザーは誰ですか?表に示すように、ユーザーのプロジェクトは他のユーザー(から)が使用でき、ユーザーは自分のプロジェクト(プロジェクト)を持つことができます。

他のユーザーが使用しているユーザープロジェクトの量と、自分が所有者ではないユーザープロジェクトの数について、私は関係を数えることを考えました。

誰でも私にddplyや要約やgroup_byのような別の関数を使ってこれを行う方法を教えてもらえますか?

私はforを使って関数を生成することができましたが、特にこれは処理に何百万人ものユーザーがいるときに、これが最も適切な解決策ではないことが分かりました。

ありがとうございます!

答えて

1
out <- data.frame(summarize(group_by(df, users), 
        number_of_user_owned_projects = length(df$from[df$from %in% projects]), 
        number_of_projects_from_others = length(unique(from[from != 0])))) 
out 
    users number_of_user_owned_projects number_of_projects_from_others 
1  1        3        2 
2  2        2        2 
3  3        1        1 
4  4        2        3 
+0

number_of_user_owned_projectsで、私は**列から** ** **プロジェクトにしている列をプロジェクトの数を確認したいと思います。プロジェクトの量だけではありません。例えば、ユーザ1は、異なるユーザによって2回使用されるプロジェクト101を有する。だから、私はこの分析を各ユーザープロジェクトとユーザーあたりの合計にしたいと思っています。 –

+0

更新をご覧ください。 – AidanGawronski

+0

@AidanGawronski 'length(df $ from%projects%)'はどのように動作しますか? –

0
temp = df %>% group_by(from) %>% summarise(cntr = n()) %>% filter(from != 0) 

#temp 

# from cntr 
#1 100  1 
#2 101  2 
#3 106  2 
#4 108  1 
#5 111  2 


output = left_join(df, temp, by = c("projects" = "from")) %>% 
      group_by(users) %>% 
      summarize(user_owned = sum(cntr, na.rm = TRUE), other_owned = sum(from != 0)) 

#output 

# users user_owned other_owned 

#1  1   3   2 
#2  2   2   2 
#3  3   1   1 
#4  4   2   3 
+0

ありがとう!私は本当にあなたの助けに感謝します。 –

関連する問題