2017-06-16 53 views
2

试图在R中做一个简单的数据透视,就像在SQL中一样。R中的数据在重复行中旋转

我明白这个问题已被问到,但我有重复行的麻烦。

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 

我都试过改造并tidyr包和他们要么汇总数据重塑的情况下,或抛出DUPLI错误在tidyr的情况下分类行标识符。

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

我该怎么做呢?这些是正确的软件包,还是任何人都可以提出另一种方法?

回答

4

我希望这将工作:

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 
+0

神奇奏效一种享受!非常好,非常感谢 – Praxis

3

另一种选择是从melt/dcastdata.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