根据2列的条件创建随机采样的数据帧

时间:2019-07-08 23:43:18

标签: r dataframe random conditional-statements

我有一个具有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

但是我不知道如何使函数自动化。

任何建议都将受到欢迎!

1 个答案:

答案 0 :(得分:1)

我们可以在此处使用Map。仅对前50个值进行子集RECAF的查找,找出范围内的索引和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])