Изменить порядок столбцов на другой столбец в R - PullRequest
1 голос
/ 27 марта 2020

Рассмотрим следующий кадр данных в R:

d <- data.frame(c("e204030","d405054",""),c("d405054","s304020","e204030"),
                c("val1020","val1030","val1040"))

Я хочу переупорядочить второй столбец на основе первого столбца, чтобы я получил следующий кадр данных:

1:  e204030 e204030  val1040
2:  d405054 d405054  val1020
3:          s304020  val1030

Как сделать Я делаю это в R? Как вы можете видеть, есть одно значение (s304020), в котором он не может найти совпадение в первом столбце, поэтому эту строку следует просто поместить внизу.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Способ с использованием базы R:

#Create a copy of dataframe
e <- d
#Get the row indices which match
inds <- na.omit(match(d$a,d$b))
#Assign the match rows
e[seq_along(inds), -1] <- d[inds, -1] 
#assign the rows which do not match
e[(length(inds) + 1):nrow(e),-1] <- d[setdiff(seq_len(nrow(d)), inds), -1]
e
#        a       b       c
#1 e204030 e204030 val1040
#2 d405054 d405054 val1020
#3         s304020 val1030

data

d <- data.frame(a = c("e204030","d405054",""),
                b = c("d405054","s304020","e204030"),
                c = c("val1020","val1030","val1040"))
0 голосов
/ 27 марта 2020

Я нашел следующее решение:

reorder_idx <- match(d$a,d$b)

e <- d

e$b <- e$b[reorder_idx]
e$c <- e$c[reorder_idx]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...