我想在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
说我想day
成为类因子并temp
成为类整数
我可以融化后做 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"))
我们可以使用melt
from data.table
,其中还有选项variable.factor
和value.factor
。除此之外,其中colClasses
不是参数。
dM <- melt(setDT(example), id.vars = "day", variable.name = "minmax",
value.name = "temp", variable.factor=FALSE)
但是,假设如果我们需要在一个步骤中执行此操作,请创建一个vector
函数,然后使用Map
和将其应用get
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句