r - Element wise mean from data frame -
i have data frame 3 columns , 16 rows. each element has values row1 values (0.9, 0.9, 1.0), (0.7,0.9, 1.0), (0.9, 0.9, 1.0). want element wise mean e.g., (0.9+0.7+0.9/3), (0.9+0.9+0.9/3), (1.0+1.0+1.0/3) , store result new column. suggestions?
sho1 sho2 sho3 1 0.7, 0.9, 1.0 0.9, 0.9, 1.0 0.7, 0.9, 1.0 2 0.7, 0.9, 1.0 0.9, 0.9, 1.0 0.7, 0.9, 1.0 3 0.0, 0.0, 0.1 0.9, 0.9, 1.0 0.0, 0.0, 0.1
expected out row1:
0.7+0.9+0.7/3, 0.9+0.9+0.9/3, 1.0+1.0+1.0/3
based on dput
output op (in comments), found columns in 'df1' not 'strings'. infact each element of each column list
. so, instead of doing strsplit
(as suggested earlier), loop through columns lapply
, rbind
list
elements (do.call(rbind
). output 'list' contains 'matrix' list elements.
can use reduce
take elementwise sum (reduce('+', ..
), , divide length of list
i.e. 3.
the matrix output ('m1') can pasted rowwise (do.call(paste
) after converting 'data.frame' , create new column in original dataset ('df1').
m1 <- reduce('+', lapply(df1, function(x) do.call(rbind, x)))/ncol(df1) df1$newcol <- do.call(paste, c(as.data.frame(m1), sep=", ")) df1 # sho1 sho2 sho3 #1 0.9, 0.9, 1.0 0.7, 0.9, 1.0 0.9, 0.9, 1.0 #2 0.9, 0.9, 1.0 0.7, 0.9, 1.0 0.9, 0.9, 1.0 #3 0.3, 0.5, 0.7 0.7, 0.9, 1.0 0.3, 0.5, 0.7 #4 0.7, 0.9, 1.0 0.9, 0.9, 1.0 0.9, 0.9, 1.0 # newcol #1 0.833333333333333, 0.9, 1 #2 0.833333333333333, 0.9, 1 #3 0.433333333333333, 0.633333333333333, 0.8 #4 0.833333333333333, 0.9, 1
data
df1 <- structure(list(sho1 = structure(list(vh = c(0.9, 0.9, 1), vh = c(0.9, 0.9, 1), m = c(0.3, 0.5, 0.7), h = c(0.7, 0.9, 1)), .names = c("vh", "vh", "m", "h")), sho2 = structure(list(h = c(0.7, 0.9, 1), h = c(0.7, 0.9, 1), h = c(0.7, 0.9, 1), vh = c(0.9, 0.9, 1)), .names = c("h", "h", "h", "vh")), sho3 = structure(list(vh = c(0.9, 0.9, 1), vh = c(0.9, 0.9, 1), m = c(0.3, 0.5, 0.7), vh = c(0.9, 0.9, 1)), .names = c("vh", "vh", "m", "vh"))), .names = c("sho1", "sho2", "sho3"), row.names = c(na, 4l), class = "data.frame")
Comments
Post a Comment