【问题标题】:Calculating average Based on Condition in R根据R中的条件计算平均值
【发布时间】:2017-08-11 12:39:07
【问题描述】:

参考问题"Calculating average of based on condition",我需要根据F列计算E列的average

下面是我的数据框df 的一部分,但我的实际数据是 65K 值。

        E            F        
     3.130658445    -1
     4.175605237    -1
     4.949554963    0
     4.653496112    0
     4.382672845    0
     3.870951272    0
     3.905365677    0
     3.795199341    0
     3.374740696    0
     3.104690415    0
     2.801178871    0
     2.487881321    0
     2.449349554    0
     2.405409636    0
     2.090901539    0
     1.632416356    0
     1.700583696    0
     1.846504012    0
     1.949797831    0
     1.963114449    0
     2.033100326    0
     2.014312751    0
     1.997178247    0
     2.143775497    0

基于上述帖子中提供的解决方案,以下是我的脚本。

setDT(df)[, Avg := c(rep(mean(head(d$fE, 5)), 5), rep(0, .N-5)), 
      cumsum(c(TRUE,  diff(abs(F)!=1)==1))]

但执行时出现以下错误。

rep(0, .N - 5) 中的错误:'times' 参数无效

【问题讨论】:

  • 该错误来自于尝试代表一个值 -n 次。试试rep(0, -1)
  • @Sotos 我仍然遇到同样的错误。
  • 我知道,你应该是。我没有提供解决方案,我只是在解释错误:)
  • 不是告诉回答者他们的代码不满足模糊的条件,而是明确显示给定示例的所需输出。如需更多指导:stackoverflow.com/questions/5963269/…顺便说一句,您的 q 应该是独立的,而不是要求人们阅读链接的材料。

标签: r data.table


【解决方案1】:

使用聚合:

agg <- aggregate(df$E,by=list(df$F), FUN=mean)

您使用了数据表示例,但您在 qu 中说数据框 数据表:

# this will retain all rows and return mean as a new column (per group_
df[, Mean:=mean(E), by=list(F)]
# this will return means per group only
df[, mean(E),by=.(F)]

【讨论】:

  • 谢谢!!!但是代码似乎不满足参考帖子中提到的条件。
【解决方案2】:

试试这个:dt<-data.table(df) dt[,Avg:=mean(E),by="F"] dt <- unique(dt,by="F")

这是结果:

 `E  F      Avg
1: 3.130658 -1 3.653132
2: 4.949555  0 2.797826

只做这个:dt<-data.table(df) dt[,Avg:=mean(E),by="F"]

你会得到:E F Avg 1: 3.130658 -1 3.653132 2: 4.175605 -1 3.653132 3: 4.949555 0 2.797826 4: 4.653496 0 2.797826 5: 4.382673 0 2.797826 6: 3.870951 0 2.797826 7: 3.905366 0 2.797826 8: 3.795199 0 2.797826 9: 3.374741 0 2.797826 10: 3.104690 0 2.797826 11: 2.801179 0 2.797826 12: 2.487881 0 2.797826 13: 2.449350 0 2.797826 14: 2.405410 0 2.797826 15: 2.090902 0 2.797826 16: 1.632416 0 2.797826 17: 1.700584 0 2.797826 18: 1.846504 0 2.797826 19: 1.949798 0 2.797826 20: 1.963114 0 2.797826 21: 2.033100 0 2.797826 22: 2.014313 0 2.797826 23: 1.997178 0 2.797826 24: 2.143775 0 2.797826

【讨论】:

  • 感谢您的解决方案,但代码似乎不满足参考帖子中提到的条件。
  • 尝试第二种解决方案@ANmike
  • No No,row 2F 列中-1 的最后一个点,因此平均值应从row 3row 7column B 和@ 计算987654331@ 列应该是0 之后来自row 8
  • @ANmike 那我不明白你想要什么。你能解释清楚吗?
猜你喜欢
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多