gpt4 book ai didi

r - 在melt/gather 中为新列指定类

转载 作者:行者123 更新时间:2023-12-01 13:39:53 28 4
gpt4 key购买 nike

我想在 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成为类(class)因素和 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来自 data.table它也有选项 variable.factorvalue.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

关于r - 在melt/gather 中为新列指定类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41216340/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com