我正在尝试将R中的一个宽数据帧重塑为一个长数据帧。仔细阅读reshape2tidyr中的某些函数,如果您有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/

10-12 16:29
查看更多