2015-02-27 3 views
0

у меня есть набор данных, который имеет один столбец идентификаторов, а затем 100 столбцов с перечислением баллов для каждого из 100 вопросов, как так:reshape2 и расплавить несколько последовательных столбцов переменных

ID  Q1  Q2  ...  Q100 
S1  1  1  ...  1 

Я написал свой код следующим образом:

library(reshape2) 
new_df <- melt(df, id.vars = "ID", measure.var = c("Q1", "Q100)) 

Однако, очевидно, это не сработает - он только тает в колонке Q1 и Q100. Есть ли способ расплавить Q1-Q100 либо с использованием строки, либо с использованием расположения столбцов (т. Е. [, 2: 101]?)

Спасибо!

+0

Просьба указать, откуда «расплавляется» не только в названии. –

+0

Что произойдет, если вы просто используете 'melt (df, id.vars =" ID ")'? – coffeinjunky

+0

@Pascal: Спасибо. Исправленный. –

ответ

0

Поскольку вы сказали, что у вас есть сотни других переменных, я создал образец данных с переменными ID, Q1-Q5 и некоторыми переменными со случайными именами.

df <- data.frame(ID=c(1:20),Q1=sample(1:20,replace=T), 
        Q2=sample(1:20,replace=T), 
        Q3=sample(1:20,replace=T), 
        Q4=sample(1:20,replace=T), 
        sekf=sample(1:20,replace=T), 
        Q5=sample(1:20,replace=T), 
        rew=sample(1:20,replace=T) 
        ) 

#Counting variable names with "Q" 
a <- paste("Q",1:(ncol(df)),sep="") %in% names(df) 
a2<- sum(a==T) 


new_df <- melt(df, id.vars = "ID", measure.var = paste("Q",1:a2,sep="")) 

Надеюсь, это полезна.

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