使用重复行在 R 中旋转数据

Pivoting data in R with duplicate rows

尝试在 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 的情况下为重复的行标识符抛出错误。

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

我是不是走错了路?这些是要使用的正确软件包吗?或者有人可以建议另一种方法吗?

我希望这会奏效:

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

另一个选项是 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