2017-01-12 6 views
1

Я пытаюсь преобразовать длинный формат данных в широкоформатный формат с помощью dcast пакета reshape2. Мой кадр данных выглядит что-то похожее на кадр данных нижеИзмените кадр данных в R в широком формате

X = c(3,2,3,3,2,3,3,2,3) 
Y = c(-3, -1, -3, -3, -1, -3, -3, -1, -3) 
DATA = c(100, 200, 300, 400, 100, 500, 600, 200, 300) 
measurement = c("A", "A", "A", "B", "B", "B", "C", "C", "C") 
DF <- data.frame(X, Y, DATA, measurement) 
wideDF <- dcast(DF, X + Y ~ measurement, fun.aggregate = mean, value.var="DATA", drop = TRUE) 

dcast функция работает совершенно нормально, но иногда у меня есть огромный список имен столбцов, которые я не хочу, чтобы жестко закодировать все имена столбцов (в приведенный выше код вроде X + Y), я хотел бы передать имена столбцов в виде вектора или, тем не менее, сделать мой код простым. Могу ли я достичь этого с помощью функции dcast или есть ли какая-либо функция, кроме dcast?

+1

Параметр 'formula' параметр' dcast() 'имеет специальную переменную' '.... который "_represents все остальные переменные не используются в formula_"('? Reshape2 :: dcast'). Это может быть полезно для вашего дела. – Uwe

ответ

3

Вы можете создать формулу в виде строки, а затем использовать as.formula()

В lhs я захватывая все имена столбцов, которые не DATA или measurement с помощью setdiff().

library(reshape2) 
lhs <- paste0(setdiff(names(DF), c("DATA", "measurement")), collapse = "+") 

dcast(DF, as.formula(paste0(lhs, "~ measurement")), fun.aggregate = mean, value.var = "DATA", drop = TRUE) 
# X Y A B C 
# 1 2 -1 200 100 200 
# 2 3 -3 200 450 450 
+0

Ваше решение отлично работало для меня. благодаря –

 Смежные вопросы

  • Нет связанных вопросов^_^