簡體   English   中英

根據其他兩列的聚合添加新列

[英]Add a new column based on aggregation from other two columns

隨着數據框

(d <- data.frame(x = c(22, 2, 14, 3, 50, 11), E= rep(c('C','D'), each=3), F = rep(c('A','B'), 3)))
   x E F
1 22 C A
2  2 C B
3 14 C A
4  3 D B
5 50 D A
6 11 D B

我想為因子“F”的每個級別匯總列“x”,如下所示:

(y <- aggregate(x ~ F, d, function(x) x-mean(x)))
  F        x.1        x.2        x.3
1 A  -6.666667 -14.666667  21.333333
2 B  -3.333333  -2.333333   5.666667

什么是使用命令的優雅方式,以便上述聚合結果可以附加到原始數據幀,如下所示?

   x E F  y
1 22 C A  -6.666667
2  2 C B  -3.333333
3 14 C A -14.666667
4  3 D B  -2.333333
5 50 D A  21.333333
6 11 D B   5.666667

她的正在路上。 您可以使用F定義組。 對於每個組,您希望從x減去平均值。

library(dplyr)
group_by(d, F) %>% 
mutate(result = x - mean(x))

      x E     F     result
  <dbl> <fct> <fct>  <dbl>
1    22 C     A      -6.67
2     2 C     B      -3.33
3    14 C     A     -14.7 
4     3 D     B      -2.33
5    50 D     A      21.3 
6    11 D     B       5.67

如果使用 data.table 包,可以通過以下方式實現相同的功能。

library(data.table)
setDT(d)[, result := x - mean(x), by = F][]

    x E F     result
1: 22 C A  -6.666667
2:  2 C B  -3.333333
3: 14 C A -14.666667
4:  3 D B  -2.333333
5: 50 D A  21.333333
6: 11 D B   5.666667

在基礎 R 中,我們可以使用ave將函數應用於每個組,保持行數相同。

d$y <- with(d, x - ave(x, F))
#Explicitly mentioning the function name
#d$y <- with(d, x - ave(x, F, FUN = mean))
d

#   x E F          y
#1 22 C A  -6.666667
#2  2 C B  -3.333333
#3 14 C A -14.666667
#4  3 D B  -2.333333
#5 50 D A  21.333333
#6 11 D B   5.666667

ave默認FUN參數為mean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM