【问题标题】:How to calculate means by rows如何按行计算均值
【发布时间】:2014-08-12 22:59:17
【问题描述】:

我想知道如何通过 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)})

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

【问题讨论】:

  • 你试过data$C4 &lt;- rowMeans(data[, c("C1", "C2")])吗?
  • 我得到'closure'类型的错误对象不是子集
  • 嗯?它非常适合您提供的数据集。也许添加na.rm=T?如rowMeans(data[, c("C1", "C2")], na.rm = T)。否则你的问题是不可重现的
  • 你是对的。谢谢你。我在内部结构方面遇到了麻烦
  • within(data, C4 &lt;- rowMeans(cbind(C1, C2)))transform(data, C4 = rowMeans(cbind(C1, C2)))

标签: r


【解决方案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)

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多