2017-03-04 19 views
1

gnucash mysql dbのアカウント用の子フィールドと親フィールドを持つデータフレームがあります。私は、アカウント階層をデータフレームに保存したいと思います。過去には、mySQLで再帰的な結合を使用しましたが、階層が深くなるにつれて扱いにくくなります。あなたはまたあなたの木がどれだけ多くのレベルを知る必要があります。私は階層構造を構築するためにRでより簡単な方法があることを望んでいる(最大深度を知っているかどうかにかかわらず)。R階層データの再帰的マージ

サンプルデータ:

account_id <- c(1:11) 
account_name <- c('root_account','dining', 'food', 'discretionary_expense', 
        'expenses', 'base_salary_wife', 'base_salary_husband', 
        'base_salary', 'salary', 'taxable_income', 
        'income') 
account_parentid <- c(NA,3,4,5,1,8,8,9,10,11,1) 
test.data <- data.frame(account_id, account_name, account_parentid) 

所望の出力:

account_id   account_name account_parentid lvl2_parentid lvl3_parentid lvl4_parentid lvls 
1   1   root_account    NA   NA   NA   NA NA 
2   2    dining    3    4    6   NA 4 
3   3     food    4    5   NA   NA 3 
4   4 discretionary_expense    5   NA   NA   NA 2 
5   5    expenses    1   NA   NA   NA 1 
6   6  base_salary_wife    8    9   10   11 5 
7   7 base_salary_husband    8    9   10   11 5 
8   8   base_salary    9   10   11   NA 4 
9   9    salary    10   11   NA   NA 3 
10   10  taxable_income    11   NA   NA   NA 2 
11   11    income    1   NA   NA   NA 1 

答えて

1

あなたは階層データで動作するようにdata.treeパッケージを使用することができます。

は、テストデータを取得します:

account_id <- c(1:11) 
account_name <- c('root_account','dining', 'food', 'discretionary_expense', 
        'expenses', 'base_salary_wife', 'base_salary_husband', 
        'base_salary', 'salary', 'taxable_income', 
        'income') 
account_parentid <- c(NA,3,4,5,1,8,8,9,10,11,1) 
test.data <- data.frame(account_id, account_parentid, account_name, stringsAsFactors = F) 

O data.tree構造:

library(data.tree) 
tree1 <- FromDataFrameNetwork(test.data[-1,]) 
tree1$account_name <- 'root_account' 

ディスプレイ:

ToDataFrameTree(tree1, account = 'name', 'account_name', 'pathString') 

これがそうのように表示されます:とき

   levelName account   account_name pathString 
1 1       1   root_account    1 
2 ¦--5      5    expenses   1/5 
3 ¦ °--4     4 discretionary_expense   1/5/4 
4 ¦  °--3    3     food  1/5/4/3 
5 ¦   °--2   2    dining  1/5/4/3/2 
6 °--11      11    income   1/11 
7  °--10     10  taxable_income  1/11/10 
8   °--9    9    salary  1/11/10/9 
9    °--8   8   base_salary 1/11/10/9/8 
10     ¦--6  6  base_salary_wife 1/11/10/9/8/6 
11     °--7  7 base_salary_husband 1/11/10/9/8/7 

ない質問の一部を、それは本当に面白い場所です階層などを要約したいと思います。データツリーのherehereをご覧ください。

関連する問題