使用R代码通过从每个组合中随机选择一行来重新组织数据框

时间:2017-06-29 17:07:46

标签: r

我有一个如下所示的数据框:

Subject  N   S
Sub1-1   3   1
Sub1-2   3   1
Sub1-3   3   1
Sub1-4   3   1
Sub2-1   3   1
Sub2-2   3   1
Sub2-3   3   1
Sub2-4   3   1
Sub3-1   3   2
Sub3-2   3   2
Sub3-3   3   2
Sub4-1   3   2
Sub4-2   3   2
Sub4-3   3   2
Sub5-1   3   2
Sub5-2   3   2
Sub6-1   1   1
Sub6-2   1   1
Sub6-3   1   1
Sub7-1   1   1
Sub7-2   1   1
Sub7-3   1   1
Sub8-1   1   1
Sub8-2   1   1
Sub8-3   1   2
Sub9-1   1   2
Sub9-2   1   2
Sub1-1   1   2
Sub1-2   1   2
Sub1-3   1   2
Sub5-1   1   2
Sub5-2   1   2
Sub1-5   2   1
Sub1-6   2   1
Sub1-7   2   1
Sub1-5   2   1
Sub2-6   2   1
Sub2-5   2   1
Sub2-6   2   1
Sub2-7   2   1
Sub3-8   2   2
Sub3-5   2   2
Sub3-6   2   2
Sub4-7   2   2
Sub4-5   2   2
Sub4-6   2   2
Sub5-7   2   2
Sub5-8   2   2

正如您在此数据框中看到的那样,N和S列中有6种不同的组合,每种组合有8个连续的行。我想创建一个新的数据帧,其中随机选择每个组合中的一行(即3& 1或1& 2),然后将其放入新的数据帧中,以便每个不同的组合有8个连续的行。这样,所有48行的整个数据帧都被完全重组。这可能在R代码中吗?

编辑:所需的输出将是这样的,但重复直到所有48行都已满并且每行的主题编号将是随机的,因为它是每个N&的随机选择的行。 S combo。

Subject  N   S
         3   1
         1   1
         3   2
         1   2
         2   2
         2   1
         2   2
         3   2
         2   1
         1   1
         3   1
         1   2

1 个答案:

答案 0 :(得分:1)

使用dplyr中的函数的解决方案。

# Load package 
library(dplyr)

# Set seed for reproducibility
set.seed(123)

# Process the data
dt2 <- dt %>%
  group_by(N, S) %>%
  sample_n(size = 1)

# View the result
dt2

## A tibble: 6 x 3
## Groups:   N, S [6]
#  Subject     N     S
#    <chr> <int> <int>
#1  Sub6-3     1     1
#2  Sub5-1     1     2
#3  Sub1-5     2     1
#4  Sub5-8     2     2
#5  Sub2-4     3     1
#6  Sub3-1     3     2

更新:重新组织行

以下随机化所有行。

dt3 <- dt %>% slice(sample(1:n(), n()))

数据准备

dt <- read.table(text = "Subject  N   S
Sub1-1   3   1
                 Sub1-2   3   1
                 Sub1-3   3   1
                 Sub1-4   3   1
                 Sub2-1   3   1
                 Sub2-2   3   1
                 Sub2-3   3   1
                 Sub2-4   3   1
                 Sub3-1   3   2
                 Sub3-2   3   2
                 Sub3-3   3   2
                 Sub4-1   3   2
                 Sub4-2   3   2
                 Sub4-3   3   2
                 Sub5-1   3   2
                 Sub5-2   3   2
                 Sub6-1   1   1
                 Sub6-2   1   1
                 Sub6-3   1   1
                 Sub7-1   1   1
                 Sub7-2   1   1
                 Sub7-3   1   1
                 Sub8-1   1   1
                 Sub8-2   1   1
                 Sub8-3   1   2
                 Sub9-1   1   2
                 Sub9-2   1   2
                 Sub1-1   1   2
                 Sub1-2   1   2
                 Sub1-3   1   2
                 Sub5-1   1   2
                 Sub5-2   1   2
                 Sub1-5   2   1
                 Sub1-6   2   1
                 Sub1-7   2   1
                 Sub1-5   2   1
                 Sub2-6   2   1
                 Sub2-5   2   1
                 Sub2-6   2   1
                 Sub2-7   2   1
                 Sub3-8   2   2
                 Sub3-5   2   2
                 Sub3-6   2   2
                 Sub4-7   2   2
                 Sub4-5   2   2
                 Sub4-6   2   2
                 Sub5-7   2   2
                 Sub5-8   2   2",
                 header = TRUE, stringsAsFactors = FALSE)