Мы используем данные, воспроизводимые в примечании в конце.Вопрос имеет пример вывода, но не объясняет, как он был рассчитан, поэтому мы просто предполагаем, что он определяется вращением Destination
в группе Person
.Сначала определите функцию rotation
, а затем используйте ave
, чтобы применить ее к каждой группе Person
.Наконец, измените порядок столбцов в порядке, указанном в вопросе.Пакеты не используются.
rotate <- function(x) c(tail(x, 1), head(x, -1))
transform(DF, Origin = ave(Destination, Person, FUN = rotate))[c(1:2, 4:3)]
, что дает:
Person Trip Origin Destination
1 1 1 US Japan
2 1 2 Japan US
3 2 1 China US
4 2 2 US Japan
5 2 3 Japan China
Примечание
При удалении запятой в конце второй строки данных мы принимаем следующие данные:
Lines <- "Person, Trip,Destination
1, 1,Japan
1,2,US
2,1,US
2,2, Japan
2,3, China"
DF <- read.csv(text = Lines, strip.white = TRUE, as.is = TRUE)