Перемешивание кадра данных при сохранении порядка с другим фреймом данных

72
10

У меня есть 2 кадров данных train и label. Кадр данных train имеет 784 строк и столбцов 20K. label фрейма данных имеет 1 строку и 20 тыс. Столбцов. Каждый столбец i в label соответствует столбцу i в train. train - это что-то вроде:

---->--- 20K Columns ---->
0 0 0 0 ... 3
1 0 . . ... .
4 0
9 7
. .
. .
. .
1 4

Поэтому для каждого столбца i где я принадлежит {1,20K}, в рамке данных label есть соответствующая метка, которая выглядит примерно так:

---->----20K columns----->
0 -1 3 4 5 8 0 -5 -9 1 2 ....

Первый столбец в train соответствует первому столбцу в label, второй столбец в train соответствует второму столбцу в label и так далее.

Теперь я хочу перетасовать фрейм данных train. Но если я перетасовал train, заказ с label потеряется. Есть ли способ, где я мог перетасовать train кадр данных, сохраняя при этом порядок с label?

спросил(а) 2018-03-31T07:40:00+03:00 2 года, 6 месяцев назад
1
Решение
93

Перемешайте вектор упорядочения и используйте это для заказа обоих объектов.

shuffle <- sample(ncol(label))
label <- label[,shuffle]
train <- train[,shuffle]

Пример с mtcars:

#create the label data frame
label <- data.frame(as.list(names(mtcars)), stringsAsFactors = FALSE)
label
# X.mpg. X.cyl. X.disp. X.hp. X.drat. X.wt. X.qsec. X.vs. X.am. X.gear. X.carb.
# 1 mpg cyl disp hp drat wt qsec vs am gear carb

shuffle <- sample(ncol(label))
mtcars <- mtcars[,shuffle]
label <- label[,shuffle]
label
# X.carb. X.wt. X.hp. X.cyl. X.mpg. X.gear. X.vs. X.am. X.drat. X.disp. X.qsec.
# 1 carb wt hp cyl mpg gear vs am drat disp qsec

head(mtcars)
# carb wt hp cyl mpg gear vs am drat disp qsec
# Mazda RX4 4 2.620 110 6 21.0 4 0 1 3.90 160 16.46
# Mazda RX4 Wag 4 2.875 110 6 21.0 4 0 1 3.90 160 17.02
# Datsun 710 1 2.320 93 4 22.8 4 1 1 3.85 108 18.61
# Hornet 4 Drive 1 3.215 110 6 21.4 3 1 0 3.08 258 19.44
# Hornet Sportabout 2 3.440 175 8 18.7 3 0 0 3.15 360 17.02
# Valiant 1 3.460 105 6 18.1 3 1 0 2.76 225 20.22

Более прямым подходом было бы rbind двух фреймов данных, но я предположил, что у вас есть их как отдельные объекты по какой-либо причине.

ответил(а) 2018-03-31T07:46:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема