在R中的一个数据帧中同时对每两列重新采样
我有一个非常大的数据框,包含100行和400000列 要对每个列进行采样,我只需执行以下操作:在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循环来实现这一点,这需要花费很长时间。有更好的办法吗?谢谢
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分钟。非常感谢!!