代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

使用apply时行名消失

  •  2
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    1:20 按升序排列,按降序排列的行基于 out.tot

    # Generate data
    shooter1 <- round(runif(n = 20, min = 1, max = 10))
    shooter2 <- round(runif(n = 20, min = 1, max = 10))
    shooter3 <- round(runif(n = 20, min = 1, max = 10))
    out <- data.frame(t(data.frame(shooter1, shooter2, shooter3)))
    colnames(out) <- 1:ncol(out)
    
    out.sort <- t(apply(out, 1, sort, na.last = FALSE))
    out.tot <- apply(out , 1, sum)
    colnames(out.sort) <- 1:ncol(out.sort)
    out2 <- cbind(out.sort, out.tot)
    
    out3 <- apply(out2, 2, sort, decreasing = TRUE, na.last = FALSE)
    

    out2 out3 失去了他们。唯一的区别是我用 MARGIN = 2 产出3 不会消失?

    > out2
             1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 out.tot
    shooter1 1 2 2 3 3 3 4 5 5  5  6  6  6  6  6  7  8  9  9 10     106
    shooter2 1 3 3 3 3 4 4 4 5  5  5  5  5  6  7  8  8  9  9 10     107
    shooter3 1 1 2 2 2 3 3 4 5  5  5  6  6  6  6  7  8  8  8  9      97
    
    > out3
         1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 out.tot
    [1,] 1 3 3 3 3 4 4 5 5  5  6  6  6  6  7  8  8  9  9 10     107
    [2,] 1 2 2 3 3 3 4 4 5  5  5  6  6  6  6  7  8  9  9 10     106
    [3,] 1 1 2 2 2 3 3 4 5  5  5  5  5  6  6  7  8  8  8  9      97
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Greg    14 年前

    如果我理解你的例子 out2 out3 您正在对每一列进行独立排序—这意味着第1行上的值可能并非全部来自shooter1生成的数据。这样行名就可以像行名是观察值的名称一样被删除,并且不再在一行中保留来自一个观察值的数据。