在 R 中深度改组数据框
Deeply shuffling a dataframe in R
我正在寻找一种函数或算法来随机排列 R 中的 dataframe/matrix 个浮点数,而不是仅按行或列排列,而是对值进行完全深度随机化。
我尝试了函数 sample() 先打乱行,然后打乱列,但同一行的元素最终会以不同的顺序出现在同一行中,我更希望进行完整的打乱。
df = t1 t2 t3 t3
g1 1 4 7 0
g2 8 7 2 9
g3 4 6 8 1
应该导致
df = t1 t2 t3 t3
g1 8 2 4 1
g2 2 1 8 6
g3 7 9 7 0
如果你用unlist
,相信你还能用sample
:
df <- data.frame(
row.names = c("g1", "g2", "g3"),
t1 = c(1, 8, 4),
t2 = c(4, 7, 6),
t3 = c(7, 2, 8),
t4 = c(0, 9, 1)
)
df
shuffle <- sample(unlist(df), size = length(unlist(df)))
shuffled_matrix <- matrix(shuffle, nrow = nrow(df), ncol = ncol(df))
df_shuffled <- data.frame(shuffled_matrix)
row.names(df_shuffled) <- row.names(df)
colnames(df_shuffled) <- colnames(df)
df_shuffled
我正在寻找一种函数或算法来随机排列 R 中的 dataframe/matrix 个浮点数,而不是仅按行或列排列,而是对值进行完全深度随机化。
我尝试了函数 sample() 先打乱行,然后打乱列,但同一行的元素最终会以不同的顺序出现在同一行中,我更希望进行完整的打乱。
df = t1 t2 t3 t3
g1 1 4 7 0
g2 8 7 2 9
g3 4 6 8 1
应该导致
df = t1 t2 t3 t3
g1 8 2 4 1
g2 2 1 8 6
g3 7 9 7 0
如果你用unlist
,相信你还能用sample
:
df <- data.frame(
row.names = c("g1", "g2", "g3"),
t1 = c(1, 8, 4),
t2 = c(4, 7, 6),
t3 = c(7, 2, 8),
t4 = c(0, 9, 1)
)
df
shuffle <- sample(unlist(df), size = length(unlist(df)))
shuffled_matrix <- matrix(shuffle, nrow = nrow(df), ncol = ncol(df))
df_shuffled <- data.frame(shuffled_matrix)
row.names(df_shuffled) <- row.names(df)
colnames(df_shuffled) <- colnames(df)
df_shuffled