从长到宽 reshape 数据框

标签 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")

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

最佳答案

尝试这个

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

关于从长到宽 reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134062/

相关文章:

R ggplot scale_fill_gradient2 直方图与点图

r - 按总体平均值划分 data.table 行

ROracle - dbWriteTable,日期列

python - 按 Fortran 连续顺序 reshape dask.array

r - 使用 R 管道时,没有适用于 'tbl_vars' 应用于类 "c(' fseq', 'function' ) 的对象的方法

r - left_join (dplyr) 下一个可用日期

mysql - 在 MySQL 或 R 中 reshape 表

r - 尝试在包含日期的数据帧上使用 melt() 时出现错误

python - tf.reshape() 在内部是如何工作的?

r - 将非唯一值放入新列的 spread()