如何解决R.符合条件的示例行在一个值范围内随机;在另一个值范围内固定 数据
我有一个像这样的数据框A:
SNP X Y
rs1 5 aa
rs2 1 bb
rs3 6 aa
rs4 2 bb
rs7 11 ft
rs8 3 hg
rs9 1.2 ff
rs10 2.2 cc
rs11 2.2 yh
rs362 3.2 hyu
使用R,我想对以下2个条件的行进行采样:(1)将所有行的值保持在X> = 5; (2)随机抽样而不替换X> 0和X
SNP X Y
rs1 5 aa
rs2 1 bb
rs3 6 aa
rs7 11 ft
rs9 1.2 ff
rs362 3.2 hyu
我正在尝试类似的事情:
A.1 = A[A$X >= 5,]
B.2 = A[sample(nrow(A),2),]
解决方法
我们可以使用Valid
函数:
which
set.seed(1) # reproducible
d[c(which(d$X >= 5),sample(which(d$X > 0 & d$X < 5),2)),]
SNP X Y
1 rs1 5.0 aa
3 rs3 6.0 aa
5 rs7 11.0 ft
2 rs2 1.0 bb
7 rs9 1.2 ff
在数据中找到which(d$X >= 5)
所在的行。然后,我们再次使用X >= 5
查找其中X > 0 & X < 5
的行,并从这些行中找到which
2。然后,我们将这两个行索引向量连接在一起。
数据
sample
,
使用dplyr
可以按照以下步骤进行操作:
library(dplyr)
A.1 <- A %>% filter(X >= 5)
B.2 <- A %>% anti_join(A.1) %>% slice_sample(n = 2)
#For dplyr < 1.0.0 use sample_n
#B.2 <- A %>% anti_join(A.1) %>% sample_n(2)
A.1
# SNP X Y
#1 rs1 5 aa
#2 rs3 6 aa
#3 rs7 11 ft
B.2
# SNP X Y
#1 rs11 2.2 yh
#2 rs2 1.0 bb
A.1
具有X >= 5
所在的所有行。然后,我们使用anti_join
从A
中获取的A.1
中所有行,并从中采样2行。如果要合并两个数据帧,可以使用bind_rows(A.1,B.2)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。