R-用固定类别非零值的平均值替换零值
我得到了以下形式的数据集R-用固定类别非零值的平均值替换零值,r,dataframe,replace,R,Dataframe,Replace,我得到了以下形式的数据集 year<-rep(c(1990:1999),each=10) age<-rep(50:59, 10) cat1<-rep(c("A","B","C","D","E"),each=100) value<-rnorm(10*10*5) value[c(3,51,100,340,441)]<-0 df<-data.frame(year,age,cat1,value) year age cat1 value 1 1990
year<-rep(c(1990:1999),each=10)
age<-rep(50:59, 10)
cat1<-rep(c("A","B","C","D","E"),each=100)
value<-rnorm(10*10*5)
value[c(3,51,100,340,441)]<-0
df<-data.frame(year,age,cat1,value)
year age cat1 value
1 1990 50 A -0.7941799
2 1990 51 A 0.1592270
3 1990 52 A 0.0000000
4 1990 53 A 1.9222384
5 1990 54 A 0.3922259
6 1990 55 A -1.2671957
我们将用替换条目0
sum(df[df$year==1990 & df$age==52,4])/4
[1] -0.4735654
一般来说,有没有一种好的、干净的方法?可能99.9%的表操作可以分解为基本的快速和优化操作:拆分、串联(数字的情况下):求和、乘法等、过滤、排序、连接 这里是从dplyr加入的左路。 只需创建另一个从零过滤出来的数据帧,并通过适当的分组聚合到值上。然后用新联接列中的值替换零
library(data.table)
setDT(df)[value==0, value := NA,]
df[, value := replace(value, is.na(value), mean(value, na.rm = TRUE)) , by = .(year, age)]
library(data.table)
setDT(df)[value==0, value := NA,]
df[, value := replace(value, is.na(value), mean(value, na.rm = TRUE)) , by = .(year, age)]