如何按行计算均值

时间:2014-08-12 10:35:54

标签: r

我想知道如何通过id行计算两个变量(C1和C2)的平均值(C4):

示例:

给出样本数据框

    ID C1 C2 C3    C4      C5
     1  3  3  5    3       3.9
     2  2  7  4    4,5     3.9
     3  4  3  3    3,5     3.9
     4  4  4  6    4       3.9
     5  5  5  3    5       3.9

我试过了:

data <- within(data,{ C4<- (mean(C1)+mean(C2))/2})

仅给出(C5)一个值。我想我需要这样的东西:

data <- within(data,{ C4<- (mean(C1)+mean(C2))/2, by=list(ID)})

我想保留内部结构,因为我必须使用与上述相同的逻辑创建几个新变量作为给定变量的手段。 更糟糕的是,我还要在该命令中使用na.rm = T.

1 个答案:

答案 0 :(得分:1)

以下简单代码也应该有效:ddf $ C6 =(ddf $ C1 + ddf $ C2)/ 2
(可以使用C4而不是C6)

ddf = structure(list(ID = 1:5, C1 = c(3L, 2L, 4L, 4L, 5L), C2 = c(3L, 
7L, 3L, 4L, 5L), C3 = c(5L, 4L, 3L, 6L, 3L), C4 = c("3", "4,5", 
"3,5", "4", "5"), C5 = c(3.9, 3.9, 3.9, 3.9, 3.9)), .Names = c("ID", 
"C1", "C2", "C3", "C4", "C5"), class = "data.frame", row.names = c(NA, 
-5L))
> 
> 
ddf
  ID C1 C2 C3  C4  C5
1  1  3  3  5   3 3.9
2  2  2  7  4 4,5 3.9
3  3  4  3  3 3,5 3.9
4  4  4  4  6   4 3.9
5  5  5  5  3   5 3.9
> 
> 
ddf$C6 = (ddf$C1+ddf$C2)/2
ddf
  ID C1 C2 C3  C4  C5  C6
1  1  3  3  5   3 3.9 3.0
2  2  2  7  4 4,5 3.9 4.5
3  3  4  3  3 3,5 3.9 3.5
4  4  4  4  6   4 3.9 4.0
5  5  5  5  3   5 3.9 5.0
> 
> 

或:

ddf$C6 = with(ddf, (C1+C2)/2)