在R中建立一棵树
我想在R中设计一个算法,给定一个因子数据框,它返回一个比例树,其中基数是数据框(观察值)的行数 例如,假设我的数据帧的行数是100,我有4个因子。第一个因素将观测值分为两个级别,每个级别都有50%的观测值。然后,下一个因子将之前的每个级别拆分为4个级别,依此类推其他两个因子。当然,每片叶子的比例并不一定相等 我怎样才能做到这一点?我一直在尝试几种方法,但我有点卡住了在R中建立一棵树,r,R,我想在R中设计一个算法,给定一个因子数据框,它返回一个比例树,其中基数是数据框(观察值)的行数 例如,假设我的数据帧的行数是100,我有4个因子。第一个因素将观测值分为两个级别,每个级别都有50%的观测值。然后,下一个因子将之前的每个级别拆分为4个级别,依此类推其他两个因子。当然,每片叶子的比例并不一定相等 我怎样才能做到这一点?我一直在尝试几种方法,但我有点卡住了 提前感谢。我不确定输出应该是什么,但这个问题对我来说似乎是递归的,所以这里有一个递归方法。假设您有一个因子的data.frame,
提前感谢。我不确定输出应该是什么,但这个问题对我来说似乎是递归的,所以这里有一个递归方法。假设您有一个因子的
data.frame
,您希望按每列中的因子从左到右分割数据。此函数将执行此操作,从而生成一个“叶”列表,该列表对应于上一列中的数据,由前一列中的各种因素分组进行分割
## Sample data
set.seed(0)
dat <- setNames(data.frame(matrix(sample(0:1, 75, rep=T), 25, 3)),
paste0("f", 1:3))
dat[] <- lapply(dat, as.factor)
f <- function(data) {
if (NCOL(data) < 2L) return( split(data, data) )
lapply(split(data[,-1L], data[,1L]), f)
}
## Apply function
res <- f(dat)
## Proportions at each leaf
## The naming is: column1.column2.column3. etc.
rapply(res, function(x) length(x)/nrow(dat))
# 0.0.0 0.0.1 0.1.0 0.1.1 1.0.0 1.0.1 1.1.0 1.1.1
# 0.08 0.08 0.24 0.04 0.16 0.16 0.16 0.08
## Counts
rapply(res, function(x) length(x))
# 0.0.0 0.0.1 0.1.0 0.1.1 1.0.0 1.0.1 1.1.0 1.1.1
# 2 2 6 1 4 4 4 2
## For example, the data corresponding to 1.1.0,
with(dat, dat[f1==1 & f2==1 & f3==0,])
# f1 f2 f3
# 5 1 1 0
# 8 1 1 0
# 18 1 1 0
# 22 1 1 0
##样本数据
种子集(0)
是的!这正是我所需要的。谢谢现在,我需要用计数(或比例)绘制一个图表,其中包含一个母节点和从中向下流动的叶子。我怎么做呢?我一直在浏览igraph软件包教程,但到目前为止还没有找到令人满意的结果。我不确定,但我认为该函数需要进行一些修改,以存储有关每个级别的信息。您可能想问一个新问题,这样人们更容易看到这个新问题(如果您在脑海中有一个输出的图像,效果会更好)。现在我们开始: