【问题标题】:Using R code to reorganize data frame by randomly selecting one row from each combination使用 R 代码通过从每个组合中随机选择一行来重组数据框
【发布时间】:2017-06-29 17:07:45
【问题描述】:

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

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 组合的随机选择的行。

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

【问题讨论】:

  • 也向我们展示所需的输出。
  • 好的,我试着解释一下我想要的输出

标签: r


【解决方案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)

【讨论】:

  • 对不起,我对 R 不是很熟悉。这是什么:%>% 占位符?
  • 称为管道运算符。请看这个(stackoverflow.com/documentation/r/652/…
  • 有什么方法可以编辑代码,这样我就可以像这样组织所有原始行而不重复?不只是 6 个?
  • 不确定你的意思。您只想重新组织行吗?
  • 请看我的更新。如果您只想随机化行,则不需要 group_by
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多