R - изменить порядок столбцов NULL - PullRequest
0 голосов
/ 13 мая 2018

У меня следующий вопрос.Если у меня есть следующий фрейм данных db, и я хочу переставить столбцы так, чтобы они оставались пустыми (как в db2), столбцы NULL остаются на концах.Как я могу сделать это динамически?Спасибо

db<-data.frame(N=c(2,4,6,8),
               a=c(1,1,1,1),
               b=c(1,1,1,1),
               c=c(NA,1,1,1),
               d=c(NA,1,1,1),
               e=c(NA,NA,1,1),
               f=c(NA,NA,1,1),
               g=c(NA,NA,NA,1),
               h=c(NA,NA,NA,1))

db2<-data.frame(N=c(2,4,6,8),
                a=c(NA,NA,NA,1),
                b=c(NA,NA,1,1),
                c=c(NA,1,1,1),
                d=c(1,1,1,1),
                e=c(1,1,1,1),
                f=c(NA,1,1,1),
                g=c(NA,NA,1,1),
                h=c(NA,NA,NA,1))

  N  a  b  c d e  f  g  h
1 2 NA NA NA 1 1 NA NA NA
2 4 NA NA  1 1 1  1 NA NA
3 6 NA  1  1 1 1  1  1 NA
4 8  1  1  1 1 1  1  1  1

1 Ответ

0 голосов
/ 13 мая 2018

Если количество NA в ряду всегда четное, то циклически перебирайте строки, переставляйте NA, добавляя половину NA в начале и конце

db[-1] <- t(apply(db[-1], 1, function(x) {
     i1 <- is.na(x)
    if(sum(i1) > 0) setNames(c(rep(NA,sum(i1)/2), x[!i1], 
       rep(NA, sum(i1)/2)), names(x)) else x}))
db
#  N  a  b  c d e  f  g  h
#1 2 NA NA NA 1 1 NA NA NA
#2 4 NA NA  1 1 1  1 NA NA
#3 6 NA  1  1 1 1  1  1 NA
#4 8  1  1  1 1 1  1  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...