我有一个非常大的数据框,包含100行和400000列。
要对每列进行采样,我可以这样做:
df <- apply(df, 2, sample)
但我希望每两列都能一起采样。例如,如果最初col1为c(1,2,3,4,5)
且col2也为c(6,7,8,9,10)
,并且在重新采样后,col1变为c(1,3,2,4,5)
,我希望col2为c(6,8,7,9,10)
,其遵循重新采样模式COL1。 col3&amp; col4,col5&amp; col6等。
我写了一个for循环来做这个,这需要永远。有没有更好的办法?谢谢!
答案 0 :(得分:1)
你可以试试这个;使用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