所以我对R有点新意,所以如果这是一个愚蠢的问题,请原谅我。我有一组行为数据,如下所示:
time behavior
10:04:36 FEED
10:04:37 FEED
10:04:38 REST
10:04:39 REST
10:04:40 RUN
等..
我添加了一个列,将每个新行为编号为唯一编号,例如:
time behavior Number
10:04:36 FEED 1
10:04:37 FEED 1
10:04:38 REST 2
10:04:39 REST 2
10:04:40 RUN 3
因此,如果10:04:36和10:30:00的行为都是FEED,它们仍然被识别为不同的行为事件,因为它们具有不同的数字。然后我按行为类别对我的数据进行子集化,以便我拥有所有行为的数据集。但是,在此数据集中,每次有新的行为事件时,我都有数字类别,例如:
time behavior Number
10:04:36 FEED 1
10:04:37 FEED 1
10:30:00 FEED 10
10:30:01 FEED 10
10:30:02 FEED 10
11:01:00 FEED 21
11:01:01 FEED 21
等...
现在,我想要做的是按数字类别随机化这个新数据集。因此,我想告诉R使用相同的Number值获取每个数据块并重新组织这些块。我尝试使用sample(),但这似乎只适用于按行随机化。正如您所看到的,Number类别的大小也不尽相同。基本上我想创建一个看起来像这样的新矩阵:
time behavior Number
10:30:00 FEED 10
10:30:01 FEED 10
10:30:02 FEED 10
11:01:00 FEED 21
11:01:01 FEED 21
10:04:36 FEED 1
10:04:37 FEED 1
所以,我希望R将每个新的Number类别识别为一个独特的事件,然后按每个新事件随后重新组织数据,而不是按行。
有没有人知道如何做我在R中尝试做的事情?
答案 0 :(得分:0)
您可以创建辅助函数,例如
reorderingFunc <- function(data, indxCol){
indx <- sample(unique(data[, indxCol]))
data[order(unique(data[, indxCol])[match(data[, indxCol], indx)]), ]
}
测试
set.seed(111) # Setting a seed so the outcome of `sample` be reproducible
reorderingFunc(df, "Number")
# time behavior Number
# 3 10:30:00 FEED 10
# 4 10:30:01 FEED 10
# 5 10:30:02 FEED 10
# 6 11:01:00 FEED 21
# 7 11:01:01 FEED 21
# 1 10:04:36 FEED 1
# 2 10:04:37 FEED 1