简体   繁体   English

重塑数据框从长到宽

[英]Reshape a data frame from long to wide

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... 但这没有多大帮助......

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来稍微修改您的解决方案

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM