【问题标题】:Reshape Wide to Long in R and include Sequence Number在 R 中将 Wide 重塑为 Long 并包含序列号
【发布时间】:2012-01-24 23:11:47
【问题描述】:

我希望获取当前较宽的数据并将其融合为长格式。诀窍是我想创建一个序列指示器。

这是我的数据:

df.wide <- data.frame(id = 1:5, 
                      code1 = sample(month.abb, 5),
                      code2 = sample(month.abb, 5))

我在寻找什么:

   id rank value
1   1    1       Dec
2   1    2       Jan
3   2    1       May
4   2    2       Jun
5   3    1       Aug
6   3    2       Aug
7   4    1       Sep
8   4    2       Mar
9   5    1       Dec
10  5    2       Nov

我怀疑我可以使用这个:

melt(df.wide, id=c("id"))

然后遍历数据以清理结果,但我知道 reshape 是一个很棒的包,我想在重新发明轮子之前问一下。

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    这是使用base R 中的reshape 函数的单行代码(不要与reshape 包混淆)

    reshape(df.wide, varying = 2:3, timevar = 'rank', sep = "", direction = 'long')
    

    【讨论】:

    • 这很棒;正是我想要的。谢谢。
    【解决方案2】:

    据我所知,你已经走上正轨了。

    df.melt <- melt(df.wide, idvar='id', variable_name='rank')
    df.melt$rank <- gsub('code', '', df.melt$rank)
    

    无需逐句重复。

    你也可以使用:

    levels(df.melt$rank) <- 1:2
    

    但是,请注意这两个版本都给出了字符而不是数字。如果需要数字,请将 gsub 包裹在 as.numeric() 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2022-12-13
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多