R 想要获得基于因子列的偏离平均值的值的数据帧吗
例如: 假设我有这个数据框R 想要获得基于因子列的偏离平均值的值的数据帧吗,r,dplyr,tidyverse,data-cleaning,data-wrangling,R,Dplyr,Tidyverse,Data Cleaning,Data Wrangling,例如: 假设我有这个数据框 x = data.frame(factor = as.factor(c('a','a','b','b','c','c')),value1 = c(1,3,2,4,5,3), value2 = c(7,9,3,4,9,3)) factor value1 value2 1 a 1 7 2 a 3 9 3 b 2 3 4 b 4 4 5
x = data.frame(factor = as.factor(c('a','a','b','b','c','c')),value1 = c(1,3,2,4,5,3), value2 = c(7,9,3,4,9,3))
factor value1 value2
1 a 1 7
2 a 3 9
3 b 2 3
4 b 4 4
5 c 5 9
6 c 3 3
我知道如何获得每个因子的平均值,我使用以下方法:
aggregate(x[,c(2,3)], list(x$factor), mean, na.rm = T )
这将为我提供以下输出:
Group.1 value1 value2
1 a 2 8.0
2 b 3 3.5
3 c 4 6.0
现在我如何从原始数据帧中的每个值中减去其因子的相应平均值。我使用的实际数据集很大,所以需要有一个好的方法,我已经设法做到了,但我使用了复杂的for循环
所以我想要的输出是:
factor value1 value2
1 a -1 -1.0
2 a 1 1.0
3 b -1 -0.5
4 b 1 0.5
5 c 1 3.0
6 c -1 -3.0
任何帮助都会很好。谢谢。您可以尝试这种dplyr方法:
library(dplyr)
#Data
x = data.frame(factor = as.factor(c('a','a','b','b','c','c')),value1 = c(1,3,2,4,5,3), value2 = c(7,9,3,4,9,3))
#Code
x <- x %>% group_by(factor) %>%
mutate(Mv1=mean(value1),
Mv2=mean(value2),
value1=value1-Mv1,
value2=value2-Mv2) %>% select(-c(Mv1,Mv2))
输出:
# A tibble: 6 x 3
# Groups: factor [3]
factor value1 value2
<fct> <dbl> <dbl>
1 a -1 -1
2 a 1 1
3 b -1 -0.5
4 b 1 0.5
5 c 1 3
6 c -1 -3
您可以尝试以下dplyr方法:
library(dplyr)
#Data
x = data.frame(factor = as.factor(c('a','a','b','b','c','c')),value1 = c(1,3,2,4,5,3), value2 = c(7,9,3,4,9,3))
#Code
x <- x %>% group_by(factor) %>%
mutate(Mv1=mean(value1),
Mv2=mean(value2),
value1=value1-Mv1,
value2=value2-Mv2) %>% select(-c(Mv1,Mv2))
输出:
# A tibble: 6 x 3
# Groups: factor [3]
factor value1 value2
<fct> <dbl> <dbl>
1 a -1 -1
2 a 1 1
3 b -1 -0.5
4 b 1 0.5
5 c 1 3
6 c -1 -3
dplyr解决方案
输出
# A tibble: 6 x 3
# Groups: factor [3]
factor value1 value2
<fct> <dbl> <dbl>
1 a -1 -1
2 a 1 1
3 b -1 -0.5
4 b 1 0.5
5 c 1 3
6 c -1 -3
dplyr解决方案
输出
# A tibble: 6 x 3
# Groups: factor [3]
factor value1 value2
<fct> <dbl> <dbl>
1 a -1 -1
2 a 1 1
3 b -1 -0.5
4 b 1 0.5
5 c 1 3
6 c -1 -3
这是一个带有data.table的解决方案
这是一个带有data.table的解决方案
withx,value1-avevalue1,factor,FUN=means withx,value1-avevalue1,factor,FUN=meanekoam,因此第一个“.”表示行值,平均值函数中的“.”表示组平均值?。指应用该公式的值。例如,对于组a和值1。代表c1,3;对于组b和值2。表示c3,4.ok,所以公式~。-意思是对于a组,当value1=1时,value1转化为:=1-平均值c1,3;对于a组的相应值,当value1=3时,value1转化为3-平均值c1,3?是的,但由于R使用向量计算,因此更准确的说法是,对于a组,公式转化为c1,3-平均值c1,3。dplyr等价物为总结。简单地用summary和~替换mutate意思是使用just mean,您将得到所需的值。ekoam,因此第一个“.”表示行值,而均值函数中的“.”表示组mean?。指应用该公式的值。例如,对于组a和值1。代表c1,3;对于组b和值2。表示c3,4.ok,所以公式~。-意思是对于a组,当value1=1时,value1转化为:=1-平均值c1,3;对于a组的相应值,当value1=3时,value1转化为3-平均值c1,3?是的,但由于R使用向量计算,因此更准确的说法是,对于a组,公式转化为c1,3-平均值c1,3。dplyr等价物为总结。简单地用summary和~替换mutate意思是只要你小心谨慎,你就会得到你所需要的。