加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

使用R在数据树上聚合值

发布时间:2020-05-27 18:24:01 所属栏目:程序设计 来源:互联网
导读:我正在尝试从数据树结构中计算出小时数.我可以直接在父节点下添加小时数,但是我不能包括分配给树中父节点的小时数.任何建议都会很棒. 这就是我得到的: levelName小时总时数 1 Ned NA 1 2° – 约翰1 3 3° – 凯特1 3 4 | – 丹1 1 5 | – 罗恩1 1 6° – 西

我正在尝试从数据树结构中计算出小时数.我可以直接在父节点下添加小时数,但是我不能包括分配给树中父节点的小时数.任何建议都会很棒.

这就是我得到的:

levelName小时总时数
1 Ned NA 1
2° – 约翰1 3
3° – 凯特1 3
4 | – 丹1 1
5 | – 罗恩1 1
6° – 西耶娜1 1

这就是我要找的东西:

levelName小时totalHours
1 Ned NA 5
2° – 约翰1 5
3° – 凯特1 4
4 | – 丹1 1
5 | – 罗恩1 1
6° – 西耶娜1 1

这是我的代码:

# Install package
install.packages('data.tree')
library(data.tree)

# Create data frame
to <- c("Ned","John","Kate","Kate")
from <- c("John","Dan","Ron","Sienna")
hours <- c(1,1,1)
df <- data.frame(from,to,hours)

# Create data tree
tree <- FromDataFrameNetwork(df)
print(tree,"hours")

# Get running total of hours that includes all nodes and children values.
tree$Do(function(x) x$total <- Aggregate(x,"hours",sum),traversal = "post-order")
print(tree,runningtotal = tree$Get(Aggregate,"total",sum))
你可以简单地使用递归函数:
myApply <- function(node) {
  node$totalHours <- 
    sum(c(node$hours,purrr::map_dbl(node$children,myApply)),na.rm = TRUE)
}
myApply(tree)
print(tree,"totalHours")

结果:

levelName hours totalHours
1 Ned                   NA          5
2  °--John               1          5
3      °--Kate           1          4
4          --Dan        1          1
5          --Ron        1          1
6          °--Sienna     1          1

编辑:填写两个元素:

# Create data frame
to <- c("Ned",1)
hours2 <- 5:1
df <- data.frame(from,hours,hours2)

# Create data tree
tree <- FromDataFrameNetwork(df)
print(tree,"hours2")

myApply <- function(node) {
  res.ch <- purrr::map(node$children,myApply)
  a <- node$totalHours <- 
    sum(c(node$hours,purrr::map_dbl(res.ch,1)),na.rm = TRUE)
  b <- node$totalHours2 <- 
    sum(c(node$hours2,2)),na.rm = TRUE)
  list(a,b)
}
myApply(tree)
print(tree,"totalHours","hours2","totalHours2")

结果:

levelName hours totalHours hours2 totalHours2
1 Ned                   NA          5     NA          15
2  °--John               1          5      5          15
3      °--Kate           1          4      4          10
4          --Dan        1          1      3           3
5          --Ron        1          1      2           2
6          °--Sienna     1          1      1           1

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读