[英]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.