【问题标题】:Split vector into all combinations of given lengths and calculate summary stats将向量拆分为给定长度的所有组合并计算汇总统计信息
【发布时间】:2018-03-27 20:31:19
【问题描述】:

我有一个包含 5 个值的向量:

data <- c(42.3, 51.5, 53.7, 53.1, 50.7)

我想将这些值分成一个长度为 2 的向量和一个长度为 3 的向量。此外,我想创建这种长度为 3 和长度为 2 向量的所有可能组合(在本例中为 10 种方式)。

这是一个这样的组合示例,“数据”中的每个值每列表示一次:

到目前为止,我有这段代码可以创建长度为 3 的所有组合:

table1 <- combn(data, 3)

这给了我第一个表,输出如下:

> table1
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 42.3 42.3 42.3 42.3 42.3 42.3 51.5 51.5 51.5  53.7
[2,] 51.5 51.5 51.5 53.7 53.7 53.1 53.7 53.7 53.1  53.1
[3,] 53.7 53.1 50.7 53.1 50.7 50.7 53.1 50.7 50.7  50.7

我的计划是通过确定原始向量(“数据”)与“table1”中每一列之间的差异来创建第二个表,以获得对应的长度为2的向量。但是,我不知道该怎么做。

完成后,我计划按列计算数据的摘要(平均值、标准差等),并比较两者。

问题是summary(table1) 有效,但sd(table1) 无效。我希望我的输出看起来像这样:

> summary(table1)
       V1              V2              V3              V4             V5             V6             V7              V8       
 Min.   :42.30   Min.   :42.30   Min.   :42.30   Min.   :42.3   Min.   :42.3   Min.   :42.3   Min.   :51.50   Min.   :50.70  
 1st Qu.:46.90   1st Qu.:46.90   1st Qu.:46.50   1st Qu.:47.7   1st Qu.:46.5   1st Qu.:46.5   1st Qu.:52.30   1st Qu.:51.10  
 Median :51.50   Median :51.50   Median :50.70   Median :53.1   Median :50.7   Median :50.7   Median :53.10   Median :51.50  
 Mean   :49.17   Mean   :48.97   Mean   :48.17   Mean   :49.7   Mean   :48.9   Mean   :48.7   Mean   :52.77   Mean   :51.97  
 3rd Qu.:52.60   3rd Qu.:52.30   3rd Qu.:51.10   3rd Qu.:53.4   3rd Qu.:52.2   3rd Qu.:51.9   3rd Qu.:53.40   3rd Qu.:52.60  
 Max.   :53.70   Max.   :53.10   Max.   :51.50   Max.   :53.7   Max.   :53.7   Max.   :53.1   Max.   :53.70   Max.   :53.70  
       V9             V10      
 Min.   :50.70   Min.   :50.7  
 1st Qu.:51.10   1st Qu.:51.9  
 Median :51.50   Median :53.1  
 Mean   :51.77   Mean   :52.5  
 3rd Qu.:52.30   3rd Qu.:53.4  
 Max.   :53.10   Max.   :53.7  

不是这样的

> sd(table1)
[1] 4.193394

任何帮助将不胜感激,谢谢

【问题讨论】:

  • finding the missing values (by comparing it to data) and then filling up the table like so 是什么意思?

标签: r combinations


【解决方案1】:

我用代码修复了前半部分:

mnumber <- function(input){
  return(setdiff(data, input))
}

table2 <- apply(table1, 2, mnumber)

这给了我输出

> table2
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 53.1 53.7 53.7 51.5 51.5 51.5 42.3 42.3 42.3  42.3
[2,] 50.7 50.7 53.1 50.7 53.1 53.7 50.7 53.1 53.7  51.5

现在我只需要分析数据。

【讨论】:

    【解决方案2】:

    在向量的索引上使用combn,并对每个组合应用一个函数:

    i <- seq_along(data)
    l <- combn(i, 3, FUN = function(cmb){
      lapply(list(data[cmb], data[setdiff(i, cmb)]), function(v){
        c(summary(v), sd = sd(v))}
      )
    }
    , simplify = FALSE)
    l[1]
    
    [[1]]
    [[1]][[1]]
         Min.   1st Qu.    Median      Mean   3rd Qu.      Max.        sd 
    42.300000 46.900000 51.500000 49.166667 52.600000 53.700000  6.047589 
    
    [[1]][[2]]
         Min.   1st Qu.    Median      Mean   3rd Qu.      Max.        sd 
    50.700000 51.300000 51.900000 51.900000 52.500000 53.100000  1.697056
    

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2017-07-01
      • 1970-01-01
      • 2014-04-09
      相关资源
      最近更新 更多