2016-12-19 7 views
3

출력 열 클래스를 melt (또는 gather)으로 지정하고 싶습니다. 그리고 나는 모든 칼럼과 다른 클래스에서 그것을하고 싶습니다. 용/수집의 새 열에 대한 클래스 지정

example <- data.frame(day = c(1, 2), max = c(20, 21), min = c(1, 2)) 

> example 
    day max min 
1 1 20 1 
2 2 21 2 

내가
exmelt <- melt(example, id.vars = "day", variable.name = "minmax", value.name = "temp") 

> exmelt 
    day minmax temp 
1 1 max 20 
2 2 max 21 
3 1 min 1 
4 2 min 2 

> str(exmelt) 
'data.frame': 4 obs. of 3 variables: 
$ day : num 1 2 1 2 
$ minmax: Factor w/ 2 levels "max","min": 1 1 2 2 
$ temp : num 20 21 1 2 

내가 클래스 요소와 temp 될 클래스의 정수

I로 day을하고 싶은 말 그 데이터를 녹여 : 예를 들어

, 나는 몇 가지 데이터가 용융 후이 작업을 수행 할 수 있습니다. as.factor()

exmelt$day <- as.factor(exmelt$day) 
exmelt$temp <- as.integer(exmelt$temp) 

> str(exmelt) 
'data.frame': 4 obs. of 3 variables: 
$ day : Factor w/ 2 levels "1","2": 1 2 1 2 
$ minmax: Factor w/ 2 levels "max","min": 1 1 2 2 
$ temp : int 20 21 1 2 

많은 열과 다른 클래스의 복잡한 데이터 프레임에 대해 나중에이를 수행하려면 일부 요소, 일부 정수 등이 지루하고 지저분해질 수 있습니다.

melt에 이것을 포함시키는 방법이 있습니까? 예 :

melt(example, 
     id.vars = "day", 
     variable.name = "minmax", 
     value.name = "temp", 
     colClasses = c("factor", "factor", "integer")) 

답변

3

우리는 또한 옵션 variable.factorvalue.factor을 가지고 data.table에서 melt를 사용할 수 있습니다. 그것 이외에는 colClasses은 그것에 대한 논쟁이 아닙니다.

dM <- melt(setDT(example), id.vars = "day", variable.name = "minmax", 
      value.name = "temp", variable.factor=FALSE) 

그러나, 우리는 단일 단계에서이 작업을 수행해야하는 경우 가정 기능의 vector을 만든 다음 Mapget

f1 <- c("as.factor", "as.factor", "as.integer") 
dM[, names(dM) := Map(function(x,y) get(y)(x), .SD, f1)] 
str(dM) 
# Classes ‘data.table’ and 'data.frame': 4 obs. of 3 variables: 
# $ day : Factor w/ 2 levels "1","2": 1 2 1 2 
# $ minmax: Factor w/ 2 levels "max","min": 1 1 2 2 
# $ temp : int 20 21 1 2 
를 사용하여 적용