重塑数据框从长到宽

时间:2015-06-30 09:09:58

标签: r reshape

我有一些问题要改变我的df的形状。

数据:

id <- c(1,2,3,4,1,4,1,2,3)
a <- c("A","B","C","D","A","D","A","B","C")
b <- c(1,1,1,1,2,2,3,3,3)
c <- c(12,10,12,23,16,17,7,9,7)
df <- data.frame(id,a,b,c)

导致:

id  a  b   c
 1  A  1  12
 2  B  1  10
 3  C  1  12
 4  D  1  23
 1  A  2  16
 4  D  2  17
 1  A  3   7
 2  B  3   9
 3  C  3   7

我想得到以下结构,其中b列对应于月份:

id    a     1    2    3  
 1    A    12   16    7
 2    B    10   NA    9
 3    C    12   NA    7
 4    D    23   17   NA

我试过了:

df2 <- reshape(df, timevar = "b", idvar = c("id", "a", "c"), direction = "wide")

但这没有多大帮助......

2 个答案:

答案 0 :(得分:4)

试试这个

library(reshape2)
dcast(df, id + a ~ b, value.var = "c")
#   id a  1  2  3
# 1  1 A 12 16  7
# 2  2 B 10 NA  9
# 3  3 C 12 NA  7
# 4  4 D 23 17 NA

或使用reshape

稍微修改您的解决方案
reshape(df, timevar = "b", idvar = c("id", "a"), direction = "wide")
#   id a  1  2  3
# 1  1 A 12 16  7
# 2  2 B 10 NA  9
# 3  3 C 12 NA  7
# 4  4 D 23 17 NA

答案 1 :(得分:3)

使用tidyr

library(tidyr)
spread(df, b, c)

#  id a  1  2  3
#1  1 A 12 16  7
#2  2 B 10 NA  9
#3  3 C 12 NA  7
#4  4 D 23 17 NA