Collapse columns in some rows to the row with least number of columns in R -
i'd know how collapse columns in dataframe row least number of columns without nas. rows 3 columns, , rest of filled na. other rows have columns filled numbers , no nas. have provided sample dataset below , i'd ideal outcome.
in ideal data frame below, middle column becomes column 2. instance, row 5 columns collapses columns 1 & 2 1, , 4 & 5 3.
a <- c(1, 1, 1, 1, 1, 1) b <- c(2, 2, 2, 2, 2, 2) c <- c(3, 3, 3, 3, 3, 3) d <- c(na, 4, na, 4, 4, na) e <- c(na, 5, na, 5, 5, na) f <- c(na, na, na, 6, 6, na) g <- c(na, na, na, 7, 7, na) df <- data.frame(a, b, c, d, e, f, g) ideal data.drame ai <- c(1, 3, 1, 1, 5, 1) bi <- c(2, 3, 2, 2, 4, 2) ci <- c(3, 9, 3, 3, 18, 3) di <- c(na, na, na, na, na, na) ei <- c(na, na, na, na, na, na) fi <- c(na, na, na, na, na, na) gi <- c(na, na, na, na, na, na) dfi <- data.frame(ai, bi, ci, di, ei, fi, gi)
the reason have dataset on politics , demographics need clean analysis. each row represents poll respondents scale of conservative liberal. polls have 3 categories of liberal/conservative, have 5 or 7 categories. way makes sense me collapse every row down row least number of columns (in sample dataframe, 3). actual dataset has thousands of rows, need automated way it.
the dataframe not sorted in particular order. i've thought cutting columns percentiles, wrongly interpret row 7 columns, since middle column (4) should row 2.
please let me know if can make question easier answer , thank help.
this clunky, work:
> apply(df, 1, function(x) {y <- na.omit(x); m <- length(y) %/% 2; c(sum(y[1:m]), y[m + 1], sum(y[(m + 2):length(y)]))}) [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 3 1 6 6 1 [2,] 2 3 2 4 4 2 [3,] 3 9 3 18 18 3
Comments
Post a Comment