繁体   English   中英

随机化R中数据帧的保守n行

[英]Randomizing conservative n rows of a dataframe in r

我遇到的问题如标题中所述。 我想将顶部,中间和底部3行随机分配到位。 这是一个示例数据框。

> set.seed(7)
> mydf
   Id Name Score Feedback
1  1   AB    11        P
2  2   AA    12        P
3  3   AC    12        P
4  4   AD    31        P
5  5   AE    13        P
6  6   AF    15        P
7  7   AG     9        F
8  8   AH     8        F
9  9   AI    11        P

我可以独立地获取前三行,最后三行和最后三行,并进行随机化,然后按如下所示合并它们:

# Take conservative 3 rows from mydf 
  top3 <- head(mydf,3)
  middle3 <- mydf[4:6,]
  tail3 <- tail(mydf,3)
# randomize the rows 
  top3r <- top3[sample(nrow(top3)),]
  middle3r <- middle3[sample(nrow(middle3)),]
  tail3r <- tail3[sample(nrow(tail3)),]
# merge them back 
  mydfr <- rbind(top3r, middle3r, tail3r)
> mydfr
   Id Name Score Feedback
2  2   AA    12        P
1  1   AB    11        P
3  3   AC    12        P
6  6   AF    15        P
4  4   AD    31        P
5  5   AE    13        P
7  7   AG     9        F
8  8   AH     8        F
9  9   AI    11        P

是否可以通过不经过手动操作来拉出n行的方式来达到相同目的?

谢谢,

如果您想使用dplyr可以采用dplyr (我确实喜欢@Gregor在注释中提供的基本解决方案)。

library(dplyr)
set.seed(1)
mydf %>% 
  mutate(grp = rep(1:3, each = 3)) %>%
  group_by(grp) %>%
  sample_n(3)
#> # A tibble: 9 x 5
#> # Groups:   grp [3]
#>      Id  Name Score Feedback   grp
#>   <int> <chr> <int>    <chr> <int>
#> 1     1    AB    11        P     1
#> 2     3    AC    12        P     1
#> 3     2    AA    12        P     1
#> 4     6    AF    15        P     2
#> 5     4    AD    31        P     2
#> 6     5    AE    13        P     2
#> 7     9    AI    11        P     3
#> 8     8    AH     8        F     3
#> 9     7    AG     9        F     3

这基本上与您的代码相同,但是没有所有中间变量。

mydf[c(sample(1:3), sample(4:6), sample(7:9)), ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM