【问题标题】:Pivoting data in R with duplicate rows在 R 中旋转具有重复行的数据
【发布时间】:2017-11-18 15:36:13
【问题描述】:

尝试在 R 中做一个简单的数据透视,就像在 SQL 中一样。

我知道有人问过这个问题,但是我遇到了重复行的问题。

Pivoting data in R

目前数据是这种格式(字符只是为了方便查看的占位符,实际数据是数字):

V1 V2 V3 V4
A  B  C  Sales
D  E  F  Sales
G  H  I  Technical
J  K  L  Technical

而且需要转成这种格式:

Variable Sales Technical
V1       A     G
V1       D     J
V2       B     H
V2       E     K
V3       C     I
V3       F     L

我已经尝试过 reshape 和 tidyr 包,它们要么在 reshape 的情况下聚合数据,要么在 tidyr 的情况下为重复的行标识符抛出错误。

我不关心重复的行标识符,事实上有必要将它们识别为分析因素。

我是不是走错了路?这些是要使用的正确软件包吗?或者任何人都可以建议其他方法吗?

【问题讨论】:

    标签: r reshape tidyr


    【解决方案1】:

    我希望这会奏效:

    df %>% gather(Variable, Value, V1:V3) %>%
        group_by(V4, Variable) %>%
        mutate(g = row_number()) %>%
        spread(V4, Value) %>% ungroup() %>%
        select(-g)
    
    # # A tibble: 6 x 3
    #   Variable Sales Technical
    # *    <chr> <chr>     <chr>
    # 1       V1     A         G
    # 2       V1     D         J
    # 3       V2     B         H
    # 4       V2     E         K
    # 5       V3     C         I
    # 6       V3     F         L
    

    【讨论】:

    • 太棒了!太好了,非常感谢
    【解决方案2】:

    另一个选项是melt/dcast 来自data.table

    library(data.table)
    dcast(melt(setDT(df1), id.var = 'V4'), variable + rowid(V4) ~
                    V4, value.var = 'value')[, V4 := NULL][]
    #   variable Sales Technical
    #1:       V1     A         G
    #2:       V1     D         J
    #3:       V2     B         H
    #4:       V2     E         K
    #5:       V3     C         I
    #6:       V3     F         L
    

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多