Как сделать и отсортировать массив кортежей в R - PullRequest
4 голосов
/ 18 марта 2012

У меня есть пара кортежей, и мне нужно отсортировать их по второму пункту. Вот псевдокод:

events <- vector(mode = "list", length = 5)
events[[1]] <- c(3,1.4)
events[[2]] <- c(2,1.8)
events[[3]] <- c(8,5.3)
events[[4]] <- c(6,1.4)
events[[5]] <- c(6,5.4)

#sort according to second item in tuple
sort(events)
events

Я бы хотел получить такой результат:

[c(3,1.4),c(6,1.4),c(2,1.8),c(8,5.3),c(6,5.4)]

1 Ответ

5 голосов
/ 18 марта 2012

Один из способов - извлечь вторые элементы каждого компонента списка, используя [, а затем упорядочить их и использовать этот порядок для сортировки events.

Сначала создайте объект данных, которому вы кажетесьhave:

events <- vector(mode = "list", length = 5)
events[[1]] <- c(3,1.4)
events[[2]] <- c(2,1.8)
events[[3]] <- c(8,5.3)
events[[4]] <- c(6,1.4)
events[[5]] <- c(6,5.4)

Следующим шагом является извлечение вторых элементов каждого из компонентов списка.Мы можем сделать это, используя sapply(), чтобы применить функцию [.2 ниже относится ко второму элементу.

> sapply(events, `[`, 2)
[1] 1.4 1.8 5.3 1.4 5.4

Затем мы можем получить порядок этих вторых элементов, используя order()

> ord <- order(sapply(events, `[`, 2))
> ord
[1] 1 4 2 3 5

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

> events[ord]
[[1]]
[1] 3.0 1.4

[[2]]
[1] 6.0 1.4

[[3]]
[1] 2.0 1.8

[[4]]
[1] 8.0 5.3

[[5]]
[1] 6.0 5.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...