我有以下数据
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乘以loc1的数量,其中Quart = Q1。因此,在这种情况下,它将是“ 3”,因为没有行同时具有Q1和loc2,所以loc2将是“ 0”,loc3将是“ 1”,而loc4将是“ 0”。
我试图使用d cast重塑数据:
d%>%
reshape2::dcast(formula = Quart * var1 ~ location
,fun.aggregate = length
translates to counts
,margins = c("Quart", "var1")
) -> d
但是,这并不能完全满足我的需求。有任何想法吗?
谢谢
一种选择是先用于tidyr::gather
转换var1
并var2
采用长格式,然后应用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句