Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的一个数据帧中同时对每两列重新采样_R_Dataframe_Random - Fatal编程技术网

在R中的一个数据帧中同时对每两列重新采样

在R中的一个数据帧中同时对每两列重新采样,r,dataframe,random,R,Dataframe,Random,我有一个非常大的数据框,包含100行和400000列 要对每个列进行采样,我只需执行以下操作: df <- apply(df, 2, sample) 但我希望每两列都一起取样。例如,如果最初col1是c1,2,3,4,5,col2也是c6,7,8,9,10,重采样后,col1变成c1,3,2,4,5,我希望col2是c6,8,7,9,10,遵循col1的重采样模式。col3和col4、col5和col6等也一样 我写了一个for循环来实现这一点,这需要花费很长时间。有更好的办法吗?谢谢

我有一个非常大的数据框,包含100行和400000列

要对每个列进行采样,我只需执行以下操作:

df <- apply(df, 2, sample)
但我希望每两列都一起取样。例如,如果最初col1是c1,2,3,4,5,col2也是c6,7,8,9,10,重采样后,col1变成c1,3,2,4,5,我希望col2是c6,8,7,9,10,遵循col1的重采样模式。col3和col4、col5和col6等也一样


我写了一个for循环来实现这一点,这需要花费很长时间。有更好的办法吗?谢谢

你可以试试这个;使用split.default每两列拆分一次数据框。对于每个子数据框,对行进行采样,然后将它们绑定在一起:

df <- data.frame(col1 = 1:5, col2 = 6:10, col3 = 11:15)

index <- seq_len(nrow(df))
cbind.data.frame(
    setNames(lapply(
        split.default(df, (seq_along(df) - 1) %/% 2), 
        function(sdf) sdf[sample(index),,drop=F]), 
    NULL)
)

#  col1 col2 col3
#5    5   10   12
#4    4    9   11
#1    1    6   15
#2    2    7   14
#3    3    8   13

大约花了10~20分钟。非常感谢!!