我有一个维数为24,523x3,468的 Dataframe ,我想对该 Dataframe 的条目进行重排。
df <- data.frame(c1=c(1, 1.5, 2, 4), c2=c(1.1, 1.6, 3, 3.2), c3=c(2.1, 2.4, 1.4, 1.7))
df_shuffled = transform(df, c2 = sample(c2))
它只对一列有效,但我想打乱所有列或所有行。我试过
col = colnames(df)
for (i in 1:ncol(df)){
df2 = transform(df, col[i] = sample(col[i]))
}
df2
它将产生如下错误
我也尝试过这种方法来进行洗牌,但它只会洗牌行和列
df_shuf = df[sample(rownames(df), nrow(df)), sample(colnames(df), ncol(df))]
df_shuf
我如何使用一个循环来按行和列重排 Dataframe df的条目?
2条答案
按热度按时间uxhixvfz1#
解决问题的一种方法:
jhdbpxl92#
虽然我发现
lapply(df, sample)
方法是最直接的(也是最规范的),但对for
循环的一个字面上的修复是认识到transform
不能在赋值的LHS上使用col[i]
。我们并不真的需要名称,但是,您可以使用索引来代替:
当然,这是假设您打算放弃行中值之间的相关性。例如,列
c1
和c2
的最小值一起出现在第1行;然而,在采样之后,它们可以出现在不同行中。如果你的目的是让每一行都在一起,那么我们只需要对行进行采样,保持帧的“观察”质量: