层次数据的R递归合并
我有一个带有子字段和父字段的数据帧,用于gnucash mysql数据库中的帐户。我想将帐户层次结构存储在数据框中。在过去,我在mySQL中使用了递归连接,但随着层次结构的加深,它变得越来越麻烦。你还必须知道你的树有多少层。我希望在R中有一种更简单的方法来构建层次结构(无论是否知道最大深度) 样本数据:层次数据的R递归合并,r,R,我有一个带有子字段和父字段的数据帧,用于gnucash mysql数据库中的帐户。我想将帐户层次结构存储在数据框中。在过去,我在mySQL中使用了递归连接,但随着层次结构的加深,它变得越来越麻烦。你还必须知道你的树有多少层。我希望在R中有一种更简单的方法来构建层次结构(无论是否知道最大深度) 样本数据: account_id <- c(1:11) account_name <- c('root_account','dining', 'food', 'discretionary_exp
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)
您可以使用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)
这将表明:
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
这不是问题的一部分,但真正有趣的是,当您想对层次结构进行总结时,等等。请参阅data.tree vignettes和
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