首页 > 解决方案 > 在数据框中选择观察并颠倒它们的顺序

问题描述

我有一个巨大的数据框,其中包含对数百个人的多个变量的许多时间相关观察。每个人在ID列中都有一个唯一的编号。我将使用下面模拟的数据,其结构类似于我的数据来提出我的问题:

set.seed(123)
dat <- data.frame(ID = rep(letters[1:10], each = 10),
                  time = rep(c(1:10), times = 10),
                  var1 = rnorm(100))

请注意,在真实数据中,每个 的实际观察次数是不同的ID。假设有几个人(例如,IDs:b、e 和 g)我需要对其进行观察并完全“翻转”或“颠倒”顺序,并且仍然保留每个time. 我的意思是(以个人 b 为例)数据框中个人 b 的第一个观察结果将是“时间间隔”10 处的数据,而不是“时间间隔”1 处的数据。换句话说,数据看起来像这样:

ID   time   Var1
a     1
a     2
…     … 
a     10 
b     10
b     9 
b     8
…     …
b     1
c     1
c     2
c     3
c     4
ect...

什么是最安全的方法来做到这一点并保持它们在数据框中的位置(即,b停留在两者之间a等等c)?

标签: rdataframe

解决方案


使用data.table

library(data.table)
setDT(dat)
ids.to.reverse <- c('b', 'e', 'g')

dat[, if(ID %in% ids.to.reverse) .SD[.N:1] else .SD, by='ID']

推荐阅读