Как превратить узлы ctree в вектор? - PullRequest
0 голосов
/ 15 декабря 2018

Я объясню свою проблему на примере с таблицей радужной оболочки.Допустим, я хочу создать дерево между шириной чашелистика и видами.Для этого я буду использовать этот код:

ctree(Species~Sepal.Width,data=iris)->a
plot(a,type="simple")

Проблема в том, что, если я хочу сделать фрейм данных, например, подсчет количества дел в каждом узле (от 0 до 2,9; от 2,9 до 3,3и т. д.), единственный способ сделать это - создать новый вектор вручную, а затем использовать функцию dcast или table.

Проблема с этим решением состоит в том, что, если бы у меня было большее дерево, это могло бы быть довольно сложно.Знаете ли вы другое решение для этого?Большое спасибо.

1 Ответ

0 голосов
/ 15 декабря 2018

На самом деле, партийная структура, созданная ctree, хранит в себе эту информацию.Используя ваш пример, у a[1]$fitted[,1] есть лист, на котором заканчивалась каждая точка. Таким образом, вы можете получить количество баллов на каждом листе с помощью:

table(a[1]$fitted[,1])
 3  4  5 
57 56 37 

Если вы пытаетесь увидеть правила, которые соответствуютномера листьев, вы можете использовать:

partykit:::.list.rules.party(a)
                                        3 
"Sepal.Width <= 3.3 & Sepal.Width <= 2.9" 
                                        4 
 "Sepal.Width <= 3.3 & Sepal.Width > 2.9" 
                                        5 
                      "Sepal.Width > 3.3"
...