在 R 中遇到融化问题
Having issues with melt in R
所以目前的数据是这样的。均值列是平均小时工资。 meanann 是平均年工资,因此最后是 ann。进入遵循相同的逻辑。然而,试图让它看起来像下面的预期结果
ID mean meanann entry entryann
32100 100 5200 99 5148
32101 101 5252 100 5200
预期结果
ID mean entry
32100 100 99
32100 5200 5148
32101 101 100
32101 5252 5200
一直在使用这个 (https://ademos.people.uic.edu/Chapter8.html) 作为教学工具,但没有找到任何可以这样做的工具。我知道你会做一个融化并指定你的 ID 变量,但问题是它首先堆叠我所有的平均观察,然后是所有的 meanann 等等。
您可以使用来自 tidyr
的 pivot_longer
更轻松地完成此操作:
tidyr::pivot_longer(df, 2:5, names_pattern = "^(mean|entry)", names_to = ".value")
#> # A tibble: 4 x 3
#> ID mean entry
#> <int> <int> <int>
#> 1 32100 100 99
#> 2 32100 5200 5148
#> 3 32101 101 100
#> 4 32101 5252 5200
来自 data.table
的 melt
可以利用 measure
中的 patterns
library(data.table)
melt(setDT(df), measure = patterns("^mean", "^entry"),
value.name = c("mean", "entry"))[, variable := NULL][]
# ID mean entry
#1: 32100 100 99
#2: 32101 101 100
#3: 32100 5200 5148
#4: 32101 5252 5200
数据
df <- structure(list(ID = 32100:32101, mean = 100:101, meanann = c(5200L,
5252L), entry = 99:100, entryann = c(5148L, 5200L)),
class = "data.frame", row.names = c(NA,
-2L))
所以目前的数据是这样的。均值列是平均小时工资。 meanann 是平均年工资,因此最后是 ann。进入遵循相同的逻辑。然而,试图让它看起来像下面的预期结果
ID mean meanann entry entryann
32100 100 5200 99 5148
32101 101 5252 100 5200
预期结果
ID mean entry
32100 100 99
32100 5200 5148
32101 101 100
32101 5252 5200
一直在使用这个 (https://ademos.people.uic.edu/Chapter8.html) 作为教学工具,但没有找到任何可以这样做的工具。我知道你会做一个融化并指定你的 ID 变量,但问题是它首先堆叠我所有的平均观察,然后是所有的 meanann 等等。
您可以使用来自 tidyr
的 pivot_longer
更轻松地完成此操作:
tidyr::pivot_longer(df, 2:5, names_pattern = "^(mean|entry)", names_to = ".value")
#> # A tibble: 4 x 3
#> ID mean entry
#> <int> <int> <int>
#> 1 32100 100 99
#> 2 32100 5200 5148
#> 3 32101 101 100
#> 4 32101 5252 5200
data.table
的 melt
可以利用 measure
patterns
library(data.table)
melt(setDT(df), measure = patterns("^mean", "^entry"),
value.name = c("mean", "entry"))[, variable := NULL][]
# ID mean entry
#1: 32100 100 99
#2: 32101 101 100
#3: 32100 5200 5148
#4: 32101 5252 5200
数据
df <- structure(list(ID = 32100:32101, mean = 100:101, meanann = c(5200L,
5252L), entry = 99:100, entryann = c(5148L, 5200L)),
class = "data.frame", row.names = c(NA,
-2L))