r - 将长表转换为宽格式,仅计算一列
问题描述
我有一个如下所示的长格式表,该输入表中的每一行都是唯一的:-
year variable
2014 ab
2014 cd
2014 ef
2016 ef
2016 gh
2014 ab
2014 cd
2014 ef
2016 ef
2016 gh
我想将此表转换为宽格式,但仅适用于variable
看起来像列联矩阵的列。例如 - 如下输出表所示,ab+cd 的组合在 2014 年出现 ONCE,ab+ef 组合在 2014 年也出现 ONCE。这样,我的输出表的第一行清楚地显示所有不同年份的输入表的Counts
不同组合variable
列。
year value ab cd ef gh
2014 ab 2 2 2 0
2014 cd 2 2 2 0
2014 ef 2 2 2 0
2014 ef 0 0 2 2
2016 gh 0 0 2 2
我曾多次尝试重塑表格,但未能达到我想要的结果。如果解决方案包括使用data.table
. 谢谢你。
解决方案
这是使用的选项data.table
:
vs <- DT[, unique(variable)]
for (x in vs) set(DT, j=x, value=0L)
DT[, (vs) := {
m <- as.matrix(.SD)
m[, match(variable, vs)] <- 1L
as.data.table(m)
}, year, .SD=vs]
DT
并且:
DT[, (vs) := {
m <- copy(.SD)
m[, match(variable, vs)] <- 1L
m
}, year, .SD=vs]
根据问题描述输出(正如 Daniel O 和 meriops 所指出的,期望的输出和问题描述之间存在一些不一致):
year variable ab cd ef gh
1: 2014 ab 1 1 1 0
2: 2014 cd 1 1 1 0
3: 2014 ef 1 1 1 0
4: 2016 ef 0 0 1 1
5: 2016 gh 0 0 1 1
数据:
library(data.table)
DT <- fread("year variable
2014 ab
2014 cd
2014 ef
2016 ef
2016 gh")
推荐阅读
- databricks - 如何停止引用旧版本的 egg 文件的 DataBricks 笔记本?
- mongodb - React POST 请求输入值错误
- idfa - 在网站上通过 IDFA / GAID 跟踪用户
- git - GIT 忽略 .gitignore
- javascript - 使用 Chart.Js 从数组中绘制散点图
- wordpress - Web Scraping - XPath - 在 div 中查找特定标签的所有元素
- dart - 通过 InkWell onTap 从其父级更改材质的颜色属性
- c - main() 包装器启动 wmain() 程序以从命令行编译它
- json - 用于查找主机和设备的最新快照的 JSON 查询?
- email - 使用编码字的 MIME 标头中的换行符是否合法?