使用R在数据树上聚合值

前端之家收集整理的这篇文章主要介绍了使用R在数据树上聚合值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试从数据树结构中计算出小时数.我可以直接在父节点下添加小时数,但是我不能包括分配给树中父节点的小时数.任何建议都会很棒.

这就是我得到的:

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
原文链接:https://www.f2er.com/javaschema/281468.html

猜你在找的设计模式相关文章