gpt4 book ai didi

r - 将长表转换为仅包含一列计数的宽格式

转载 作者:行者123 更新时间:2023-12-04 04:13:39 25 4
gpt4 key购买 nike

我有一个如下所示的长格式表格,此输入表格中的每一行都是唯一的:-

 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 年出现了一次,而 ab+ef 的组合在 2014 年也出现了一次。这样,我的输出表的第一行就清楚地显示了不同年份输入表的不同组合variable列的所有Counts

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

我已经多次尝试 reshape 表格,但未能达到我想要的结果。如果解决方案包括使用 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")

关于r - 将长表转换为仅包含一列计数的宽格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61207435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com