洗牌和交换列 R
shuffle and swap column R
我有 2000 行网球比赛的 df,单场比赛的 10 列静态数据。所有比赛均按比赛日排序,在 ID1 中为比赛的获胜者。
我需要的是打乱我的 df 的行(这不是问题,因为它很简单)并随机更改 ID1->ID2 的位置和所有列中的统计信息,例如 A_1 -> 列 A_2,当发生这种情况时添加一列,例如当列的位置更改时为“1”,当所有列都处于相同位置时为“0”。
举个例子
DAY ID1 ID2 A_1 A_2 B_1 B_2
1 10 20 4 6 10 2
2 5 4 0 2 5 1
3 23 34 5 10 2 8
4 4 12 6 4 3 1
EXPECTED RESULT
DAY ID1 ID2 A_1 A_2 B_1 B_2 X
2 5 4 0 2 5 1 0
1 20 10 6 4 2 10 1
3 4 12 6 4 3 1 0
4 23 34 5 10 2 8 0
我的第一次尝试是做一个样本,然后从主 df 中减去样本中的行。然后更改 2 个表之一中的每个名称列。
这应该有效,在基础 R
:
set.seed(16)
df1 <- apply(df[sample(nrow(df)),],1,function(x) {
s <- sample(2)
y <- c(x[1],x[s+1],x[s+3],x[s+5])
y["X"] <- !all(s == 1:2)
y})
df1 <- setNames(as.data.frame(t(df1)),c(names(df),"X"))
df1
# DAY ID1 ID2 A_1 A_2 B_1 B_2 X
# 3 3 34 23 10 5 8 2 1
# 1 1 10 20 4 6 10 2 0
# 4 4 12 4 4 6 1 3 1
# 2 2 5 4 0 2 5 1 0
sample(2)
打乱向量 1:2
。在每次迭代中都会发生一个新的采样实例。
它可以等于 c(1,2)
或 c(2,1)
。
因此:
x[s+1]
是 c(x[2],x[3])
或 c(x[3],x[2])
x[s+3]
是 c(x[4],x[5])
或 c(x[5],x[4])
x[s+5]
是 c(x[6],x[7])
或 c(x[7],x[6])
而且它们都一起切换或根本不切换,因为它们都使用相同的 s
值
我有 2000 行网球比赛的 df,单场比赛的 10 列静态数据。所有比赛均按比赛日排序,在 ID1 中为比赛的获胜者。
我需要的是打乱我的 df 的行(这不是问题,因为它很简单)并随机更改 ID1->ID2 的位置和所有列中的统计信息,例如 A_1 -> 列 A_2,当发生这种情况时添加一列,例如当列的位置更改时为“1”,当所有列都处于相同位置时为“0”。
举个例子
DAY ID1 ID2 A_1 A_2 B_1 B_2
1 10 20 4 6 10 2
2 5 4 0 2 5 1
3 23 34 5 10 2 8
4 4 12 6 4 3 1
EXPECTED RESULT
DAY ID1 ID2 A_1 A_2 B_1 B_2 X
2 5 4 0 2 5 1 0
1 20 10 6 4 2 10 1
3 4 12 6 4 3 1 0
4 23 34 5 10 2 8 0
我的第一次尝试是做一个样本,然后从主 df 中减去样本中的行。然后更改 2 个表之一中的每个名称列。
这应该有效,在基础 R
:
set.seed(16)
df1 <- apply(df[sample(nrow(df)),],1,function(x) {
s <- sample(2)
y <- c(x[1],x[s+1],x[s+3],x[s+5])
y["X"] <- !all(s == 1:2)
y})
df1 <- setNames(as.data.frame(t(df1)),c(names(df),"X"))
df1
# DAY ID1 ID2 A_1 A_2 B_1 B_2 X
# 3 3 34 23 10 5 8 2 1
# 1 1 10 20 4 6 10 2 0
# 4 4 12 4 4 6 1 3 1
# 2 2 5 4 0 2 5 1 0
sample(2)
打乱向量 1:2
。在每次迭代中都会发生一个新的采样实例。
它可以等于 c(1,2)
或 c(2,1)
。
因此:
x[s+1]
是c(x[2],x[3])
或c(x[3],x[2])
x[s+3]
是c(x[4],x[5])
或c(x[5],x[4])
x[s+5]
是c(x[6],x[7])
或c(x[7],x[6])
而且它们都一起切换或根本不切换,因为它们都使用相同的 s