【问题标题】:How can I create a boxplot of within-group euclidian distances for grouped data?如何为分组数据创建组内欧几里德距离的箱线图?
【发布时间】:2018-08-07 13:41:36
【问题描述】:

示例数据:

set.seed(1234)
a <- matrix(rnorm(250),nrow=25,ncol=10)
fac <- as.factor(c(rep("A",8),rep("B",10),rep("C",7)))
a.dist <- dist(a, "euclidian")
boxplot(a.dist ~ fac)

当我尝试运行 boxplot(a.dist ~ fac) 时,我收到以下错误:

Error in model.frame.default(formula = a.dist ~ fac) : 
  variable lengths differ (found for 'fac')

我试图解决这个问题

a.dist <- as.matrix(a.dist)
a.dist[upper.tri(a.dist)] <- NA

然后boxplot 给我回了一个有趣的情节。

我可以用

绘制特定组的组内欧几里得距离
subset <- as.factor(fac) %in% ("A")
a.dist.A <- a.dist[subset]
boxplot(a.dist.A)

基本上我需要为每个因子水平执行此操作,然后将这些箱线图组合成一个。有什么简单的方法吗?

【问题讨论】:

    标签: r plot distance boxplot euclidean-distance


    【解决方案1】:
    set.seed(1234)
    a <- matrix(rnorm(250),nrow=25,ncol=10)
    fac <- as.factor(c(rep("A",8),rep("B",10),rep("C",7)))
    
    a_grp <- split.data.frame(a, fac)    ## split matrix by group
    d_grp <- lapply(a_grp, dist)         ## apply `dist` by group
    n_grp <- lengths(d_grp)              ## number of pairs by group
    d <- unlist(d_grp)                   ## combine
    g <- rep(factor(levels(fac), levels = levels(fac)), n_grp)  ## combine
    boxplot(d ~ g)                       ## joint plot
    

    按组应用dist 是必要的,因为您不希望组间距离。

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2016-02-15
      • 2014-06-09
      • 1970-01-01
      • 2019-02-24
      • 2017-05-03
      相关资源
      最近更新 更多