Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中建立一棵树_R - Fatal编程技术网

在R中建立一棵树

在R中建立一棵树,r,R,我想在R中设计一个算法,给定一个因子数据框,它返回一个比例树,其中基数是数据框(观察值)的行数 例如,假设我的数据帧的行数是100,我有4个因子。第一个因素将观测值分为两个级别,每个级别都有50%的观测值。然后,下一个因子将之前的每个级别拆分为4个级别,依此类推其他两个因子。当然,每片叶子的比例并不一定相等 我怎样才能做到这一点?我一直在尝试几种方法,但我有点卡住了 提前感谢。我不确定输出应该是什么,但这个问题对我来说似乎是递归的,所以这里有一个递归方法。假设您有一个因子的data.frame,

我想在R中设计一个算法,给定一个因子数据框,它返回一个比例树,其中基数是数据框(观察值)的行数

例如,假设我的数据帧的行数是100,我有4个因子。第一个因素将观测值分为两个级别,每个级别都有50%的观测值。然后,下一个因子将之前的每个级别拆分为4个级别,依此类推其他两个因子。当然,每片叶子的比例并不一定相等

我怎样才能做到这一点?我一直在尝试几种方法,但我有点卡住了


提前感谢。

我不确定输出应该是什么,但这个问题对我来说似乎是递归的,所以这里有一个递归方法。假设您有一个因子的
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软件包教程,但到目前为止还没有找到令人满意的结果。我不确定,但我认为该函数需要进行一些修改,以存储有关每个级别的信息。您可能想问一个新问题,这样人们更容易看到这个新问题(如果您在脑海中有一个输出的图像,效果会更好)。现在我们开始: