我正在尝试将R中的一个宽数据帧重塑为一个长数据帧。仔细阅读reshape2
和tidyr
中的某些函数,如果您有1个要拆分的变量,而它们却有〜10个,它们似乎都只能处理。每列都有类型变量名称和年份,我希望将其拆分,以便使年份成为每一行中的一个因素,然后使列数显着减少,并且易于使用数据集。
当前该表看起来像这样。
State Rank Name V1_2016 V1_2017 V1_2018 V2_2016 V2_2017 V2_2018
TX 1 Company 1 2 3 4 5 6
我试图用reshape2融化数据,但它看起来像垃圾,当它应该只有大约10k时是127k行。
我正在尝试使数据看起来像这样。
State Rank Name Year V1 V2
1 TX 1 Company 2016 1 4
2 TX 1 Company 2017 2 5
3 TX 1 Company 2018 3 6
最佳答案
melt
中带有data.table
的选项,可以基于列名称中的measure
接受多个patterns
library(data.table)
nm1 <- unique(sub(".*_", "", names(df)[-(1:3)]))
melt(setDT(df), measure = patterns("V1", "V2"),
value.name = c("V1", "V2"), variable.name = "Year")[,
Year := nm1[Year]][]
# State Rank Name Year V1 V2
#1: TX 1 Company 2016 1 4
#2: TX 1 Company 2017 2 5
#3: TX 1 Company 2018 3 6
数据
df <- structure(list(State = "TX", Rank = 1L, Name = "Company", V1_2016 = 1L,
V1_2017 = 2L, V1_2018 = 3L, V2_2016 = 4L, V2_2017 = 5L, V2_2018 = 6L),
class = "data.frame", row.names = c(NA,
-1L))
关于r - 重塑列名中包含年份的数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56467814/