Представьте, что на столе лежат 4 карточки, и их несколько рядов (например, 5 рядов в демонстрации). Стоимость каждой карты уже указана во фрейме демонстрационных данных. Однако точное положение карты индексируется столбцами pos , см. Демонстрационные данные, которые я создал ниже.
Для этого я меняю карты с помощью функции []
в строки, чтобы вернуть значения карточек в исходное положение. Следующий код уже выполняет такую задачу. Чтобы избежать явного использования l oop, мне интересно, смогу ли я добиться аналогичного эффекта, если использую функцию векторизации с пакетами из семейства tidyverse , например pmap или связанной с ним функцией внутри пакет мурлыкать ?
# 1. data generation ------------------------------------------------------
rm(list=ls())
vect<-matrix(round(runif(20),2),nrow=5)
colnames(vect)<-paste0('card',1:4)
order<-rbind(c(2,3,4,1),c(3,4,1,2),c(1,2,3,4),c(4,3,2,1),c(3,4,2,1))
colnames(order)=paste0('pos',1:4)
dat<-data.frame(vect,order,stringsAsFactors = F)
# 2. data swap ------------------------------------------------------------
for (i in 1:dim(dat)[1]){
orders=dat[i,paste0('pos',1:4)]
card=dat[i,paste0('card',1:4)]
vec<-card[order(unlist(orders))]
names(vec)=paste0('deck',1:4)
dat[i,paste0('deck',1:4)]<-vec
}
dat