r - 在数据框中选择观察并颠倒它们的顺序
问题描述
我有一个巨大的数据框,其中包含对数百个人的多个变量的许多时间相关观察。每个人在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
。假设有几个人(例如,ID
s: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
)?
解决方案
使用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']
推荐阅读
- java - 确定唯一设备?
- java - 在 Eclipse IDE 上以 tomcat 作为服务器在服务器上运行网站
- django - AWS Lambda 无法加载“Argon2PasswordHasher”算法库
- php - 在 php 中使用全局变量来确定页面布局是不好的做法吗?
- angular - 在 id_token 到期后,Angular-ouath2-oidc 中的静默刷新不起作用
- laravel-5.7 - 如何发送表的最后一个 ID 并发送到 larvel 5.7 中的刀片文件?
- java - 是否可以使用 MapStruct 将 java 中的 HashMap 转换为 List?
- javascript - window.alert() 后无法编辑输入文本字段
- android - Glide image not loading in React Native native UI Component
- sql-server - 计算重量时我得到错误的结果