- 已编辑
如题,
# 原始数据
type min_日月 min_星辰 max_日月 max_星辰
1: A 1 38 48 42
# 第一次宽变长
variable type2 type min max
1: 1 日月 A 1 48
2: 2 星辰 A 38 42
# 第二次宽变长
type type2 variable value
1: A 日月 min 1
2: A 星辰 min 38
3: A 日月 max 48
4: A 星辰 max 42
这个问题可复现的代码如下。
library(data.table)
# 原始数据
data <- data.table(
type = 'A',
`min_日月` = 1,
`min_星辰` = 38,
`max_日月` = 48,
`max_星辰` = 42
)
head(data)
# 第一次宽变长
data1 <- melt(
data,
id.vars = 'type',
measure.vars = patterns('^min_', '^max_'),
value.name = c('min', 'max'),
variable.factor = FALSE
)
var <-
data.table(variable = as.character(c(1:2)), type2 = c('日月', '星辰'))
data1 <- var[data1, on = 'variable']
head(data1)
# 第二次宽变长
data2 <-
melt(data1,
id.vars = c('type', 'type2'),
measure.vars = c('min', 'max'))
head(data2)