Assigning content of a R dataFrame cell based on some conditions -


this question has answer here:

i have r dataframe df following content:

serial n         year         current    b              10            14    b              10            16    c              12            11    d              40            20    b              11            15    c              12             9 

i add column compute average current if serial number , year same serial number , years. have this

serial n         year         current    average     b              10            14          15    b              10            16          15    c              12            13          12    d              40            20          20    b              11            15          15    c              12            11          12 

i wrote

for (i in unique(df$serial_n))    {        (j in unique (df$year))          {  data=subset(df,serial_n==i & year==j)                df$average<-mean(data$current)             }     }      

when run it, have following error

error in `$<-.data.frame`(`*tmp*`, "average", value = nan) :  replacement has 1 row, data has 0  

what problem? how can fix it?

we can use data.table. convert 'data.frame' 'data.table' (setdt(df)), grouped 'serialn', , 'year', mean of 'current' , assign new column 'average'.

library(data.table) setdt(df)[, average := mean(current) ,.(serialn, year)] 

Comments

Popular posts from this blog

java - Suppress Jboss version details from HTTP error response -

gridview - Yii2 DataPorivider $totalSum for a column -

Sass watch command compiles .scss files before full sftp upload -