跨行传递 mean 函数,并将其作为列添加到您传递给它的同一数据集中

Pass mean function across a row, and add it as a column to the same dataset you passed it to

我确定有人问过这个问题,而且有几种方法可以做到这一点。但是,我已经搜索过但仍然找不到有用的东西。我尝试了 'apply' 路线但它不起作用,我认为这可能是 b/c 第一列是一个因素。我想计算整行的平均值,然后将该平均值添加到该行的末尾,在标题为 'mean'

的新列中

这是我的数据框的样子

    stream n          1         2         3         4
1   Brooks 3 0.42707006 1.9353659 1.4333884 1.8566225
2  Siouxon 3 0.90503736 0.2838483 0.2838483 1.0023212
3 Speelyai 3 0.08554021 0.7359903 0.4841935 0.7359903
4   Brooks 4 1.43338843 1.8566225 0.0000000 1.3242210
5  Siouxon 4 0.50574543 0.5057454 0.2838483 0.4756304
6 Speelyai 4 0.32252396 0.4343109 0.6653132 2.2294652
7   Brooks 5 0.88984211 1.8566225 0.7741612 1.3242210

但是,列标题为 1、2、3、4 的地方...这将达到 1000!所以实际上有 1002 列,但前两列实际上是向量,一个流名称,然后是样本标识符 n。当我尝试 apply 函数时,它返回了这个:

apply(sim_dat,1,mean)
#  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
#NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
#27 28 29 30 31 32 33 34 35 36 37 38 39 40 
#NA NA NA NA NA NA NA NA NA NA NA NA NA 
#41 42 43 44 45 46 47 48 49 50 51 52 53 54 
#NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

如果您在计算过程中忽略前两列,则可以使用 rowMeans。例如

sim_dat$mean <- rowMeans(sim_dat[,-(1:2)])

这将添加一个名为 means 的列,其中包含除前两列之外的每一行的值的平均值。