按组计算标准偏差,不包括R中的当前观察值
计算R数据帧中每个组的平均值很容易。如果要排除当前观察 在计算标准偏差时,有没有排除当前观测值的简单方法 例如,当我有这张桌子按组计算标准偏差,不包括R中的当前观察值,r,R,计算R数据帧中每个组的平均值很容易。如果要排除当前观察 在计算标准偏差时,有没有排除当前观测值的简单方法 例如,当我有这张桌子 data.frame(country = c(rep("A",3), rep("B",3)), weight = c(10,11,12,20,25,30)) ,我需要下表: data.frame(country = c(rep("A",3), rep("B",3)), weight = c(10,11,12,20,25,30), standarddeviation =
data.frame(country = c(rep("A",3), rep("B",3)), weight = c(10,11,12,20,25,30))
,我需要下表:
data.frame(country = c(rep("A",3), rep("B",3)), weight = c(10,11,12,20,25,30), standarddeviation = c(sd(c(11,12)), sd(c(10,12)), sd(c(10,11)), sd(c(25,30)), sd(c(20,30)), sd(c(20,25))))
一个选项是使用
dplyr
和mapply
mapply
为每一行(组)运行,并且sd
计算不包括当前行
library(dplyr)
df %>% group_by(country) %>%
mutate(Sp_SD = mapply(function(x)sd(weight[-x]), 1:n()))
# # A tibble: 6 x 3
# # Groups: country [2]
# country weight Sp_SD
# <fctr> <dbl> <dbl>
# 1 A 10.0 0.707
# 2 A 11.0 1.41
# 3 A 12.0 0.707
# 4 B 20.0 3.54
# 5 B 25.0 7.07
# 6 B 30.0 3.54
库(dplyr)
df%>%按(国家)分组%>%
变异(Sp_SD=mapply(函数(x)SD(权重[-x]),1:n())
##tibble:6 x 3
##群体:国家[2]
#国家重量标准差
#
#1A 10.0 0.707
#2 A 11.0 1.41
#3 A 12.0 0.707
#4 B 20.0 3.54
#5 B 25.0 7.07
#6 B 30.0 3.54
这不是一个很好的解决方案,但它应该可以工作
library(dplyr)
data = data.frame(country = c(rep("A",3), rep("B",3)), weight = c(10,11,12,20,25,30))
cdata = list()
for(k in 1:length(unique(data$country))){
cdata[[k]] = filter(data,country==unique(country)[k])
}
for(i in 1:length(unique(data$country))){
for(j in 1:nrow(cdata[[1]])){
aux=cdata[[i]][-j,]
cdata[[i]][j,"StandardDeviation"] = sd(aux$weight)
}
}
rbind(cdata[[1]],cdata[[2]])
那很优雅!