2016-08-18 8 views
1

У меня есть следующие данные таблицы:Указать порядок столбцов dcast вывода

df = data.frame(id=c(1,1,1,1),timepoint=c("3 months","6 months","9 months","12 months"), 
      date=c("date1","date2","date3","date4"),bool=c("Y","Y","N","Y"), 
      name=c("abc","def","ghi","jkl"), stringsAsFactors=F) 

И хотелось бы, чтобы бросить это в один ряд, с идентификатором в качестве переменной идентификатора следующим образом:

library(reshape2) 
melt = melt(df, id=c("id","timepoint")) 
df2 = dcast(melt, id~variable+timepoint) 

Однако, это оленья кожа дать мне столбцы в порядке, я хотел бы, что:

df1 = df2[,c(1,3,7,11,4,8,12,5,9,13,2,6,10)] 

Я попытался с помощью кода ниже, который переупорядочивает расплавленная стол, в надежде, что она будет затем бросить в нужном порядке:

var.names = c("date", "bool","name") 
times = c("3 months", "6 months", "9 months", "12 months") 
melt = melt[order(melt$id, match(melt$timepoint, times), match(melt$variable, var.names)),] 

Но результат тот же, и это кажется мне нужно каким-то образом указать порядок в вызове dcast, но я могу «Не знаю, как это сделать, и поэтому очень признателен за любую помощь!

Большое спасибо и извини, если я пропустил что-то очевидное.

ответ

2

Один из способов сделать это,

ind <- order(as.numeric(gsub('\\D+', '', names(df2[,-1])))) 
df3 <- df2[c(1, ind+1)] 
Смежные вопросы