r - 使用 R 根据现有变量的顺序创建新变量

标签 r variables time-series

希望基于三个现有变量创建新变量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/

相关文章:

javascript - 在 if 语句中定义 JavaScript 变量

r - 在 R 中将 DNA 序列转换为时间序列

r - 将 geom_rect() 添加到 ggplot2 中的时间序列数据

r - sym 无效参数类型

r - bookdown文档中的直方图出现两次

r - 如何使用三个不同数据帧的变量执行 PCA 并对它们进行颜色区分?

C++ 变量/循环问题

string - 是否可以在 SASS 的 @import 规则中使用变量?

java - 如何在 Apache Spark 中聚合时间序列数据

r - 如何从数据框中检索与其他列的最大值相对应的列中的值