繁体   English   中英

R 中的 Sumif 和旋转(reshape2、melt、cast、merge..)

[英]Sumif and Pivoting in R (reshape2, melt, cast, merge..)

我有一个看起来像的数据框:df->

  Elmt1      Elmt2    Type
1   1          8      Red
2   5          3      Blue
3   5          1      Blue
4   7          2      Red
5   3          2      Red
6   5          2      Red

和一个看起来像的向量:时间 <- seq(1,8,1)

我需要创建一个看起来像 newdf-> 的新数据框

  Time     Elmt1Red Elemt1Blue Elmt2Red Elmt2Blue
1   1        1          0          0         1 
2   2        0          0          3         0 
3   3        1          0          0         1 
4   4        0          0          0         0 
5   5        1          2          0         0 
6   6        0          0          0         0 
7   7        1          0          0         0
8   8        0          0          1         0 

基本上,对每个时间和类型使用 countif。 它就像 sumif、merge、melt/dcast 的组合。

我似乎无法弄清楚如何将这些结合起来。 特别是当时间是一个向量时。

谢谢你。

这是熔化、铸造和合并的组合:

library(reshape2)
m <- melt(df1, measure.var=c("Elmt1", "Elmt2"))
newdf <- dcast(m, value ~ variable + Type)
mrg <- merge(data.frame(value=Time), newdf, all.x=TRUE)
mrg[is.na(mrg)] <- 0L
mrg
#   value Elmt1_Blue Elmt1_Red Elmt2_Blue Elmt2_Red
# 1     1          0         1          1         0
# 2     2          0         0          0         3
# 3     3          0         1          1         0
# 4     4          0         0          0         0
# 5     5          2         1          0         0
# 6     6          0         0          0         0
# 7     7          0         1          0         0
# 8     8          0         0          0         1

我们可以使用来自base R table

v1 <- unlist(df[1:2])
lvls <- min(v1):max(v1)
data.frame(Time = lvls, do.call(cbind, lapply(df[1:2], 
          function(x) table(factor(x, levels=lvls), df$Type))))

暂无
暂无

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

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