希望基于三个现有变量创建新变量X:“SubID”、“Day”和“Time”。我曾经在 Excel 中使用三个排序函数来手动执行此操作:首先按“SubID”排序,然后按“日期”排序,最后按“时间”排序。 X 应根据日期和时间的顺序从 1 到每个 SubID 的最大行数。
SubID:分配的主题编号
天:每个受试者的天数(1,2,3...21)
时间:1、2、3
X:标记为相同SubID的行数
SubID Day Time X
1 1 1 1
1 1 2 2
1 1 3 3
1 2 1 4
1 2 2 5
2 1 1 1
2 1 2 2
2 1 3 3
2 2 3 6
2 2 2 5
2 2 1 4
我一直在 Excel 中手动执行此操作,并且我确信在 R 中一定有一种更智能的方法来执行此操作,但我是 R 新手,不知道如何操作。预先感谢您!
最佳答案
可能与 data.table 包一起使用。如果您还没有安装,则必须安装它。我已经评论了该命令。
# install.packages("data.table")
library(data.table)
我们可以通过以下方式生成您的数据。
df <- data.frame(SubId=sample(1:2,10,replace=TRUE),
Day=sample(1:2,10,replace=TRUE),
Time=sample(1:2,10,replace=TRUE))
然后将data.frame转换为data.table。
setDT(df)
##> df
## SubId Day Time
## 1: 1 2 1
## 2: 1 1 1
## 3: 1 1 2
## 4: 2 2 1
## 5: 2 1 1
## 6: 1 2 2
## 7: 1 2 1
## 8: 1 2 2
## 9: 2 1 1
## 10: 2 1 2
最后我们可以订购我的 SubId、Day、Time。由于表是按照我们想要的顺序排列的,因此我们只需将行从 1 编号到每个 SubId 中的观察数即可。
df[order(SubId,Day,Time),X:=1:.N,SubId]
##> df
## SubId Day Time X
## 1: 1 2 1 3
## 2: 1 1 1 1
## 3: 1 1 2 2
## 4: 2 2 1 4
## 5: 2 1 1 1
## 6: 1 2 2 5
## 7: 1 2 1 4
## 8: 1 2 2 6
## 9: 2 1 1 2
## 10: 2 1 2 3
关于r - 使用 R 根据现有变量的顺序创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198730/