首页 > 解决方案 > 使用 dcast 重塑 R 中的数据

问题描述

我有以下数据

library(reshape2)

d <- data_frame(
            Quart = c("Q1", "Q2", "Q3", "Q4", "Q4", "Q1","Q4","Q1", "Q2", "Q3"),
            var1 = c(1,0,1,1,1,0,2,3,0,1),
            var2= c(1,0,1,1,1,0,1,0,1,0),
            location= c("loc1", "loc1", "loc2", "loc2", "loc2", "loc2", "loc2",
                        "loc1", "loc2","loc1"))

我想重塑这些数据以创建一个如下所示的表格。

加星号的单元格应为 var1 乘以 Quart=Q1 的 loc1 的数量。因此,在这种情况下,它将是“3”,loc2 将是“0”,因为没有任何行同时具有 Q1 和 loc2,loc3 将是“1”,而 loc4 将是“0”。

在此处输入图像描述

我尝试使用 d cast 重塑数据:

  d%>%
  reshape2::dcast(formula = Quart * var1 ~ location
              ,fun.aggregate = length       
translates to counts
              ,margins = c("Quart", "var1")
  ) -> d

然而,这并没有给我我想要的东西。有任何想法吗?

谢谢

标签: rdcast

解决方案


一个选项是首先使用tidyr::gather转换var1var2长格式,然后应用dcast为:

library(reshape2)
library(tidyverse)
gather(d, key, value, -Quart, -location) %>%
  dcast(Quart+key ~ location, fun.aggregate = sum, value.var = "value")

#   Quart  key loc1 loc2
# 1    Q1 var1    4    0
# 2    Q1 var2    1    0
# 3    Q2 var1    0    0
# 4    Q2 var2    0    1
# 5    Q3 var1    1    1
# 6    Q3 var2    0    1
# 7    Q4 var1    0    4
# 8    Q4 var2    0    3

推荐阅读