Я звоню в базу данных, используя пакет (brapi
), который возвращает необходимые данные в длинном формате.API обрабатывает определенные переменные идентификатора как измеренные переменные, что проблематично, потому что мои сценарии анализа нуждаются в них как переменные идентификатора.Я не могу изменить вызов к базе данных таким образом, чтобы он сделал это для меня, и я не хочу просто reshape2::cast
, а затем растопить всю эту вещь, потому что есть сотни переменных, которые делают это дорогостоящим.В идеале я ищу способ сделать это с помощью reshape2
, plyr
и т. П.
Моя проблема может быть замечена с использованием встроенного фрейма данных mtcars
.Представьте, что вы получаете длинный фрейм данных, meltedcars
, с шестерней в качестве переменной-идентификатора из базы данных, но вы также хотите cyl
в качестве переменной-идентификатора.Я пробовал очевидные dcast
команды (например, показанные ниже), но я знал, что это не сработает, потому что функция не найдет cyl
в качестве переменной.
meltedcars<-melt(mtcars, id.vars = c("gear"))
head(meltedcars)
gear variable value
1 4 mpg 21.0
2 4 mpg 21.0
3 4 mpg 22.8
4 3 mpg 21.4
5 3 mpg 18.7
6 3 mpg 18.1
c<-dcast(d, gear + cyl ~ variable, value.var= "value")
Error in FUN(X[[i]], ...) : object 'cyl' not found
Я пробовал несколько итерацийфункции dcast
выше безрезультатно.Я уже давно искал похожие проблемы, но не нашел подходящего.Я знаю, что мог бы сделать это с некоторыми для циклов или путем плавления и повторного приведения, но я хочу посмотреть, есть ли более элегантное решение.Мысли?
РЕДАКТИРОВАТЬ
Я должен быть яснее.Для целей данного поста столбцы идентификаторов - это переменные в длинном формате, которые используются для идентификации наблюдаемого объекта, а не того, что измерялось.Допустим, мы измеряли mpg
и disp
на всех автомобилях в фрейме данных mtcars
, и мы хотели дополнительные , идентифицирующие информацию об автомобиле, кроме названия модели в фрейме данных в виде собственного столбца.,Чтобы идентифицировать автомобиль, у вас есть столбец с именами автомобилей (я настроил mtcars
так, чтобы имена строк теперь были столбцом внутри mtcars с именем model
), столбцом того, чем они являются gear
, и одним для сколькихcyl
каждая машина имеет.Затем у нас есть столбец переменной и столбец значений, где вид наблюдения и его значение указаны соответственно.Когда я делаю вызов в базу данных, это то, что я получаю:
head (mtcarsFromDB)
model gear variable value
1 Mazda RX4 4 mpg 21.0
2 Mazda RX4 Wag 4 mpg 21.0
3 Datsun 710 4 mpg 22.8
4 Hornet 4 Drive 3 mpg 21.4
5 Hornet Sportabout 3 mpg 18.7
6 Valiant 3 mpg 18.1
Но я хочу переформатировать этот df с cyl
, который в настоящее время является значениемпеременной, как столбец идентификатора типа gear
без приведения и плавления всей вещи.Это должно выглядеть так:
model gear cyl variable value
1 Mazda RX4 4 6 mpg 21.0
2 Mazda RX4 Wag 4 6 mpg 21.0
3 Datsun 710 4 4 mpg 22.8
4 Hornet 4 Drive 3 6 mpg 21.4
5 Hornet Sportabout 3 8 mpg 18.7
6 Valiant 3 6 mpg 18.1