перемешать и поменять местами столбец R - PullRequest
0 голосов
/ 03 июня 2018

У меня есть теннисные матчи 2000 строк с 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 таблиц.

1 Ответ

0 голосов
/ 03 июня 2018

Это должно работать, в базе 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

...