R: переупорядочение столбцов на основе порядка другого столбца - PullRequest
2 голосов
/ 18 мая 2019

У меня есть следующие данные:

x  y   id
1  2      
2  2    1
3  4    
5  6    2
3  4  
2  1    3

Пробелы в идентификаторе столбца должны иметь те же значения, что и следующее значение идентификатора. То есть мои данные должны выглядеть так:

x  y   id
1  2    1  
2  2    1
3  4    2
5  6    2
3  4    3
2  1    3

У меня также есть список:

list[[1]] = 1 3 2

Или, альтернативно, столбец:

c(1,3,2) = 1, 3, 2

Теперь я хотел бы изменить порядок своих данных на основе идентификатора столбца в соответствии с порядком в списке. Мои данные должны выглядеть так:

x  y   id
1  2   1   
2  2   1 
3  4   3
2  1   3
3  4   2
5  6   2

Есть ли эффективный способ сделать это?

РЕДАКТИРОВАТЬ: я не думаю, что это дубликат в R Сортировка по абсолютному значению без изменения данных , потому что я не хочу сортировать по абсолютному значению, но по определенному порядку, который дается в список.

1 Ответ

3 голосов
/ 18 мая 2019
Опция

A base R будет (при условии, что пробелы в столбце 'id' равны NA)

i1 <- !is.na(df1$id)
df1[i1,][match(df1$id[i1], list[[1]]),] <- df1[i1, ]
df1
#  x y id
#1 1 2 NA
#2 2 2  1
#3 3 4 NA
#4 2 1  3
#5 3 4 NA
#6 5 6  2

Если нам нужно изменить NA на последующий элемент, не являющийся NA

library(zoo)
df1$id <- na.locf(df1$id, fromLast = TRUE)

данные

df1 <- structure(list(x = c(1L, 2L, 3L, 5L, 3L, 2L), y = c(2L, 2L, 4L, 
 6L, 4L, 1L), id = c(NA, 1L, NA, 2L, NA, 3L)), class = "data.frame", 
 row.names = c(NA, -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...