我有一个具有10,000,000行和5列的数据框A,就像这样:
complete_df = ({' ':[01/04/2019 00:00:01, 01/04/2019 00:00:01 , 01/04/2019 00:00:01,
'Cond [mS/cm]': [NaN, NaN, NaN],
'Temp [C]': [NaN, NaN, NaN],
'Sal [PSU]': [NaN, NaN, NaN],
'Cond_2 [mS/cm]': [NaN, NaN, NaN],
'Temp_2 [C]': [NaN, NaN, NaN],
'Sal_2 [PSU]': [NaN, NaN, NaN]})
使用R,我想从A的所有列中生成50个新的数据帧,并以以下方式遍历前50行。
对于满足以下2个条件的A,REC,AF列中的每个i,j,从A中选择1000个随机行(替换抽样):
SNP REC AF X Y Z
rs1 2.3 0.22 sss ff 472
rs200 4.7 0.7 d tg 634
rs33 30.1 0.5 ddf ap 929
例如;对于第1行:在A中选择1000个随机行,其中REC介于-0.2和4.8之间,而AF介于0.17和0.27之间;对于第2行:在A中选择1000个随机行,其中REC的范围在2.2到7.2之间,AF的范围在0.65到0.75之间; ...对于第50行:...;等等
我知道如何使用示例函数:
1) i-2.5 < i < i+2.5 # i = value in REC
2) j-0.05 < j < j+0.05 # j = value in AF
但是我不知道如何使函数自动化。
任何建议都将受到欢迎!
答案 0 :(得分:1)
我们可以在此处使用Map
。仅对前50个值进行子集REC
和AF
的查找,找出范围内的索引和sample
符合条件的1000行。
Map(function(i, j) df[sample(which(df$REC > (i - 2.5) & df$REC < (i + 2.5) &
df$AF > (j - 0.05) & df$AF < (j + 0.05)), 1000, replace = TRUE), ],
df$REC[1:50], df$AF[1:50])