r - 使用 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
然而,这并没有给我我想要的东西。有任何想法吗?
谢谢
解决方案
一个选项是首先使用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
推荐阅读
- neo4j - 如何在c#neo4j驱动中监听neo4j触发事件
- python - 在 cython 包装器中使用 scikit-sparse 的 cholmod?
- python - 表单没有响应提交
- javascript - axios 和 vue cal (scheluder) 的问题数据恢复
- java - 如何使用正则表达式,Java查找换行后开始的单词?
- java - 使用spring boot根据特定条件运行cron作业。下面提到的java代码有什么问题
- python - 带有 for 循环的 max() 函数
- javascript - 调度不是减速器中的功能
- android - 通话意图后唤醒锁丢失
- ansible - Ansible 从 vmware_host_vmhba_facts 打印特定字段