Как отсортировать данные по строкам в R - PullRequest
3 голосов
/ 01 ноября 2019

отсортировать кадр данных по порядку в R по возрастанию

У меня есть два кадра данных

x <- data.frame("Age1"=c(21, 15, 16), "Age2"=c(14, 9, 11), "Age3"=c(5, 10, 8))
y <- data.frame("Age1"=c(10, 20, 9), "Age"=c(14, 10, 11), "Age3"=c(7, 14, 10))

x
  Age1 Age2 Age3
1   21   14    5
2   15    9   10
3   16   11    8

y
  Age1 Age Age3
1   10  14    7
2   20  10   14
3    9  11   10

Мне нужно отсортировать данные по ряду в порядке возрастания и применить тот же механизм упорядочения дляу

for (i in 1:3){
  order.pop[i,] <- order(x[i,])
  x[i,] <- x[order(x[i,]),]
  y[i,] <- y[order(x[i,]),]
}

это выдает сообщение об ошибке

In `[<-.data.frame`(`*tmp*`, i, , value = list(Age1 = c(16, 15,  :
  replacement element 3 has 3 rows to replace 1 rows

У меня есть порядок

order.pop
  Age1 Age2 Age3
1    3    2    1
2    3    1    2
3    3    2    1

И в конце мне нужно получить

x
  Age1 Age2 Age3
1   5   14    21
2   9   10    15
3   8   11   16

y 
  Age1 Age2 Age3
1   7   14    10
2   10   14  20 
3   10   11   9

Кто-нибудь может помочь?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Я использую ранг каждой строки, чтобы решить ее:

x.rank <- apply(x, 1, rank)
x[] <- tapply(t(x), x.rank, c)
y[] <- tapply(t(y), x.rank, c)

x
#   Age1 Age2 Age3
# 1    5   14   21
# 2    9   10   15
# 3    8   11   16

y
#   Age1 Age2 Age3
# 1    7   14   10
# 2   10   14   20
# 3   10   11    9

Вторая строка у отличается от ожидаемого результата. Возможно, у вас есть опечатка, или я неправильно понимаю ваш вопрос.

1 голос
/ 01 ноября 2019

Я написал небольшую функцию на основе этого ответа :

orderby <- function(x, by) {
  out <- as.data.frame(t(sapply(1:NROW(by), function(i) x[i,][order(by[i,])])))
  colnames(out) <- colnames(x)
  out
}

orderby(x, by = x)
#>   Age1 Age2 Age3
#> 1    5   14   21
#> 2    9   10   15
#> 3    8   11   16
orderby(y, by = x)
#>   Age1 Age Age3
#> 1    7  14   10
#> 2   10  14   20
#> 3   10  11    9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...