私はdata.tree構造体を使用して、ファイルフォルダ間のさまざまな情報を要約しています。各フォルダにはいくつかのファイル(値)があり、各フォルダに対して何を行う必要があるのは、フォルダ+すべてのサブフォルダに含まれるファイルの数を要約することです。R:Data.Treeのリーフとノードの両方のデータをどのように要約しますか?
例データ:問題へ
library(data.tree)
data <- data.frame(pathString = c("MainFolder",
"MainFolder/Folder1",
"MainFolder/Folder2",
"MainFolder/Folder3",
"MainFolder/Folder1/Subfolder1",
"MainFolder/Folder1/Subfolder2"),
Value = c(1,1,5,2,4,10))
tree <- as.Node(data, Value)
print(tree, "Value")
levelName Value
1 MainFolder 1
2 ¦--Folder1 1
3 ¦ ¦--Subfolder1 4
4 ¦ °--Subfolder2 10
5 ¦--Folder2 5
6 °--Folder3 2
私の現在、非常にSLOWソリューション:あなたはより効率的にこれを行う方法の提案を
# Function to sum up file counts pr folder + subfolders
total_count <- function(node) {
results <- sum(as.data.frame(print(node, "Value"))$Value)
return(results)
}
# Summing up file counts pr folder + subfolders
tree$Do(function(node) node$Value_by_folder <- total_count(node))
# Results
print(tree, "Value", "Value_by_folder")
levelName Value Value_by_folder
1 MainFolder 1 23
2 ¦--Folder1 1 15
3 ¦ ¦--Subfolder1 4 4
4 ¦ °--Subfolder2 10 10
5 ¦--Folder2 5 5
6 °--Folder3 2 2
を持っていますか?私は再帰的な方法を構築しようとしており、ノード上で関数 "isLeaf"と "children"を使用することも試みてきましたが、それを動作させることはできませんでした。あなたが行うことができます
ありがとう、私は今日2つの答えをテストします。これは最もきれいに見えますが、返されない理由があります(合計(Get $ node children、 "Value_by_folder"))+ node $ Value)? –
いいえ、それは同じです。 R関数は常に最後の値を返します。 –
@EsbenEickhardtクリーナーの定義についてはわかりませんが、これはもっと遅くなるはずです。より大きなデータセットのベンチマーク結果を教えてください。 –