#r #permutation
#r #перестановка
Вопрос:
Я хочу переставить свои данные, которые сопряжены, используя цикл for. Я думаю, что в этом случае я должен случайным образом перевернуть некоторые из моих пар, но я не могу понять, как именно это сделать. Я уже искал это в Интернете, и я нашел способы перестановки такого рода данных, но я не нашел его для такого метода. Пример того, что, я думаю, я должен делать:
Пример набора данных:
day1 day2
1 5.5 1.5
2 2.5 6.5
3 7.5 8.5
4 4.5 1.5
5 5.5 1.5
и я хочу, чтобы он случайным образом менял местами некоторые строки, например, это:
day1 day2
1 5.5 1.5
2 6.5 2.5
3 7.5 8.5
4 1.5 4.5
5 5.5 1.5
Я пытался использовать команду sample(), но, похоже, она меняет местами целые строки, а не только некоторые из них. Итак, как вы случайным образом меняете местами некоторые из них?
Ответ №1:
Если вы хотите произвольно поменять местами столбцы определенных строк, попробуйте :
set.seed(6781)
replace_inds <- sample(c(TRUE, FALSE), nrow(df), replace = TRUE)
df[replace_inds, ] <- df[replace_inds, 2:1]
df
# day1 day2
#1 5.5 1.5
#2 2.5 6.5
#3 8.5 7.5
#4 4.5 1.5
#5 1.5 5.5
данные
df <- structure(list(day1 = c(5.5, 2.5, 7.5, 4.5, 5.5), day2 = c(1.5,
6.5, 8.5, 1.5, 1.5)), class = "data.frame", row.names = c(NA, -5L))
Ответ №2:
Вот однострочный вариант, который будет перетасовывать элементы в первом и втором столбцах. Он также будет работать, если нужно поменять местами несколько столбцов:
setNames(as.data.frame(t(apply(df, 1, sample))), names(df))
#> day1 day2
#> 1 1.5 5.5
#> 2 2.5 6.5
#> 3 8.5 7.5
#> 4 4.5 1.5
#> 5 5.5 1.5
Ответ №3:
Мы можем использовать pmap
из purrr
library(dplyr)
library(purrr)
df %>%
pmap_dfr(~ sample(c(...)))
-вывод
# A tibble: 5 x 2
# day2 day1
# <dbl> <dbl>
#1 1.5 5.5
#2 6.5 2.5
#3 8.5 7.5
#4 1.5 4.5
#5 1.5 5.5
данные
df <- structure(list(day1 = c(5.5, 2.5, 7.5, 4.5, 5.5), day2 = c(1.5,
6.5, 8.5, 1.5, 1.5)), class = "data.frame", row.names = c(NA,
-5L))