Как превратить узлы ctree в вектор?
Я объясню свою проблему на примере с таблицей радужной оболочки. Допустим, я хочу создать дерево между шириной чашелистика и видами. Для этого я буду использовать этот код:
ctree(Species~Sepal.Width,data=iris)->a
plot(a,type="simple")
Проблема в том, что, если я хочу создать фрейм данных, например, подсчитать количество наблюдений в каждом узле (от 0 до 2,9; от 2,9 до 3,3 и т. Д.), Единственный способ, который я нашел, - это создать новый вектор вручную, а затем с помощью dcast
или же table
функция.
Проблема с этим решением состоит в том, что, если бы у меня было большее дерево, это могло бы быть довольно сложно. Знаете ли вы другое решение для этого? Большое спасибо.
1 ответ
Собственно, партийная структура создана 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"