重塑数据框从长到宽

时间:2021-12-23 04:28:45

I have some issues to change the shape of my df.

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

Data:

数据:

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)

which results in:

这导致:

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

I would like to get the following structure where column b corresponds to month:

我想得到以下结构,其中列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

I tried:

我试过了:

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

But that doesn't help much...

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

2 个解决方案

#1


4  

Try this

尝试这个

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

Or slightly modifying your solution using 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

#2


3  

Using tidyr

使用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

#1


4  

Try this

尝试这个

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

Or slightly modifying your solution using 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

#2


3  

Using tidyr

使用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