【发布时间】:2017-02-05 15:46:02
【问题描述】:
我有以下形式的数据:
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
... ...
假设我只有两个观察值(列“obs”)按主题(列“主题”,其中主题编号从 1 到 20)。
我想按“主题”列的值对行进行“分组”。更准确地说,我想按主题“排序”数据,但保留上面显示的顺序。因此,最终数据将是这样的:
obs subject
1.5904600 12
0.3999592 12
8.1059855 13
2.3656473 13
5.4497484 6
7.2934746 6
有什么想法吗?我想也许可以用which 识别与主题相对应的每一行:
which(data$subject==x)
然后rbind 这些行在一个循环中,但我确信有一种更简单、更快的方法来做到这一点,不是吗?
【问题讨论】:
-
您的示例数据是矩阵,它应该是 data.frame 吗?
-
试试这样的:
data[order(data$subject), ] -
@Bulat 我们将丢失原始订单。
-
data[order(factor(data[, 'subject'], levels = unique(data[, 'subject'])), ] -
哦,好的。是的,可以通过独特的因素分解。