如何在R中的数据帧的一列中将具有相同值的行配对

Lad*_*zyk 5 group-by r dataframe

我有以下形式的数据:

set.seed(1234)
data <- data.frame(cbind(runif(40,0,10), rep(seq(1,20,1), each = 2)))
data <- data[sample(nrow(data)),]
colnames(data) <- c("obs","subject")
head(data)

    obs      subject
1.5904600      12
8.1059855      13
5.4497484       6
0.3999592      12
2.5880982      19
2.6682078       9
   ...         ...
Run Code Online (Sandbox Code Playgroud)

假设我只有两个观察点(列"障碍")按主题(列"主题",其中主题从1到20编号).

我想按"主题"列的值"分组"行.更准确地说,我想按主题"订购"数据,但保留上面显示的顺序.因此,最终数据将是这样的:

    obs      subject
1.5904600      12
0.3999592      12
8.1059855      13
2.3656473      13
5.4497484       6
7.2934746       6
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?我想到可能会识别出与主题相对应的每一行which:

which(data$subject==x)
Run Code Online (Sandbox Code Playgroud)

然后rbind循环中的这些行,但我相信有一个更简单,更快的方法来做到这一点,不是吗?

zx8*_*754 5

转换为具有级别的因子然后顺序:

data$group <- factor(data$subject, levels = unique(data$subject))
data[ order(data$group), ]

#           obs subject group
# 1  1.59046003      12    12
# 4  0.39995918      12    12
# 2  8.10598552      13    13
# 30 2.18799541      13    13
# ...
Run Code Online (Sandbox Code Playgroud)