我正在尝试将以下数据集融合为3列 - '小时','变量'和'群集'
> head(kpitdur)
hr_0 hr_1030 hr_1130 hr_160 hr_180 hr_190 hr_200 hr_630 hr_830
1 79.08333 63.06667 63.06667 63.06667 63.06667 63.06667 63.06667 65.73333 63.06667
2 71.45000 51.80000 51.80000 51.80000 51.80000 51.80000 51.80000 71.45000 51.80000
3 86.96667 56.91667 56.91667 56.91667 56.91667 56.91667 56.91667 69.00000 56.91667
4 91.53333 77.38333 61.83333 77.38333 77.38333 77.38333 77.38333 77.38333 77.38333
5 91.83333 78.10000 78.10000 78.10000 78.10000 78.10000 78.10000 78.10000 78.10000
6 111.41667 65.75000 65.75000 65.75000 65.75000 65.75000 65.75000 80.63333 65.75000
hr_930 cluster
1 63.06667 2
2 51.80000 2
3 56.91667 2
4 77.38333 1
5 78.10000 1
6 65.75000 1
然而,当我在熔化中使用下面的公式时,我只给了两列,我不知道如何解决这个问题。我尝试在value.name中输入不同的变量名,但这不起作用。怎么可以将这个数据集融合成三个独立的列?
> melted <- melt(kpitdur, value.name = "cluster")
No id variables; using all as measure variables
> head(melted)
variable cluster
1 hr_0 79.08333
2 hr_0 71.45000
3 hr_0 86.96667
4 hr_0 91.53333
5 hr_0 91.83333
6 hr_0 111.41667
> tail(melted)
variable cluster
11699 cluster 1
11700 cluster 1
11701 cluster 1
11702 cluster 2
11703 cluster 1
11704 cluster 1
以下是数据样本:
> dput(df)
structure(list(hr_0 = c(79.0833333333333, 71.45, 86.9666666666667,
91.5333333333333, 91.8333333333333, 111.416666666667), hr_1030 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), hr_1130 = c(63.0666666666667,
51.8, 56.9166666666667, 61.8333333333333, 78.1, 65.75), hr_160 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), hr_180 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), hr_190 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), hr_200 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), hr_630 = c(65.7333333333333,
71.45, 69, 77.3833333333333, 78.1, 80.6333333333333), hr_830 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), hr_930 = c(63.0666666666667,
51.8, 56.9166666666667, 77.3833333333333, 78.1, 65.75), cluster = c(2L,
2L, 2L, 1L, 1L, 1L)), .Names = c("hr_0", "hr_1030", "hr_1130",
"hr_160", "hr_180", "hr_190", "hr_200", "hr_630", "hr_830", "hr_930",
"cluster"), row.names = c(NA, 6L), class = "data.frame")
答案 0 :(得分:0)
你可以做到
reshape(
data = kpitdur,
varying = -11,
direction = "long",
sep="_",
timevar = "variable"
)[-4]
# cluster variable hr
# 1.0 2 0 79.08333
# 2.0 2 0 71.45000
# 3.0 2 0 86.96667
# 4.0 1 0 91.53333
# 5.0 1 0 91.83333
# 6.0 1 0 111.41667
# 1.1030 2 1030 63.06667
# 2.1030 2 1030 51.80000
# 3.1030 2 1030 56.91667
# 4.1030 1 1030 77.38333
# ...
答案 1 :(得分:0)
您也可以使用tidyr
包
library(tidyr)
data_long <- gather(df, variable, cluster, hr_0:hr_930)
names(data_long)[3] <- "value"
> head(data_long, 5)
cluster variable value
1 2 hr_0 79.08333
2 2 hr_0 71.45000
3 2 hr_0 86.96667
4 1 hr_0 91.53333
5 1 hr_0 91.83333
答案 2 :(得分:0)
# Option 1 using reshape2
library(reshape2)
df %>%
melt(value.name = "cluster") # incorrect original result
df %>%
melt(id.vars = "cluster", value.name = "variable")
或者...
# Option 2 using tidyr
library(tidyr)
df %>%
gather(hour, variable, -cluster)