Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >长到宽的格式

我有30,000个唯一ID的实验室记录。我需要将我的数据从长格式转换为与该唯一ID相关的每个ID和TEST_DATE的更宽格式。

一个ID的示例:

我需要将其转换为更广泛的格式,如下所示:

我有一个包含30,000个ID的数据集,我需要为每个ID执行此操作。测试次数最多的ID将决定我们的列数。

我将感谢你可能需要解决这个问题的任何想法!谢谢

EN

回答 3

Stack Overflow用户

发布于 2021-01-11 22:44:45

试试这个:

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
library(tidyr)
#Code
new <- df %>%
  group_by(ACCT,TEST_DATE) %>%
  summarise(RESULT=round(mean(RESULT,na.rm=T),2)) %>%
  ungroup() %>%
  mutate(across(-ACCT,~as.character(.))) %>%
  pivot_longer(-ACCT) %>%
  group_by(ACCT,name) %>%
  mutate(name=paste0(name,row_number())) %>%
  pivot_wider(names_from = name,values_from=value) %>%
  mutate(across(starts_with('RESULT'),~as.numeric(.)))

输出:

代码语言:javascript
运行
AI代码解释
复制
# A tibble: 2 x 7
# Groups:   ACCT [2]
   ACCT TEST_DATE1 RESULT1 TEST_DATE2 RESULT2 TEST_DATE3 RESULT3
  <int> <chr>        <dbl> <chr>        <dbl> <chr>        <dbl>
1 37733 9/1/2016         3 10/18/2016       2 11/1/2016        1
2 37734 9/1/2016         5 10/18/2016       4 11/1/2016        3

使用的一些数据:

代码语言:javascript
运行
AI代码解释
复制
#Data
df <- structure(list(ACCT = c(37733L, 37733L, 37733L, 37734L, 37734L, 
37734L), TEST_DATE = c("9/1/2016", "10/18/2016", "11/1/2016", 
"9/1/2016", "10/18/2016", "11/1/2016"), RESULT = c(3L, 2L, 1L, 
5L, 4L, 3L)), class = "data.frame", row.names = c(NA, -6L))
票数 2
EN

Stack Overflow用户

发布于 2021-01-12 02:33:21

下面是一个使用dcastdata.table选项,可能会有所帮助(从@Duck借用数据)

代码语言:javascript
运行
AI代码解释
复制
> dcast(setDT(df)[, Q := seq(.N), ACCT], ACCT ~ Q, value.var = c("TEST_DATE", "RESULT"))
    ACCT TEST_DATE_1 TEST_DATE_2 TEST_DATE_3 RESULT_1 RESULT_2 RESULT_3
1: 37733    9/1/2016  10/18/2016   11/1/2016        3        2        1
2: 37734    9/1/2016  10/18/2016   11/1/2016        5        4        3

另一种选择是结合使用meltdcast,生成的格式可能就是您想要的格式

代码语言:javascript
运行
AI代码解释
复制
suppressWarnings({
  type.convert(
    dcast(
      melt(
        setDT(df)[, Q := seq(.N), ACCT],
        id = c("ACCT", "Q"),
        measure = c("TEST_DATE", "RESULT")
      )[order(ACCT, Q)],
      ACCT ~ Q + variable,
      value.var = "value"
    ),
    as.is = TRUE
  )
})

这给了我们

代码语言:javascript
运行
AI代码解释
复制
    ACCT 1_TEST_DATE 1_RESULT 2_TEST_DATE 2_RESULT 3_TEST_DATE 3_RESULT
1: 37733    9/1/2016        3  10/18/2016        2   11/1/2016        1
2: 37734    9/1/2016        5  10/18/2016        4   11/1/2016        3
票数 0
EN

Stack Overflow用户

发布于 2021-01-14 05:30:05

走这条简单的路线

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)

df %>% group_by(ACCT, TEST_DATE) %>% summarise(RESULT = mean(RESULT)) %>%
  group_by(ACCT) %>% mutate(testno = row_number(), resultno = row_number()) %>%
  pivot_wider(id_cols = ACCT, names_from = c("testno", "resultno"), values_from = c(TEST_DATE, RESULT))

# A tibble: 2 x 9
# Groups:   ACCT [2]
   ACCT TEST_DATE_1_1 TEST_DATE_2_2 TEST_DATE_3_3 TEST_DATE_4_4 RESULT_1_1 RESULT_2_2 RESULT_3_3 RESULT_4_4
  <int> <date>        <date>        <date>        <date>             <dbl>      <dbl>      <dbl>      <dbl>
1 37733 2016-01-07    2016-01-09    2016-01-11    2016-08-10             5        4.5          1          2
2 37734 2016-01-21    2016-08-20    NA            NA                     3        4           NA         NA

使用的数据(dput)

代码语言:javascript
运行
AI代码解释
复制
> dput(df)
structure(list(ACCT = c(37733L, 37733L, 37733L, 37733L, 37734L, 
37734L, 37733L), TEST_DATE = structure(c(16809, 17023, 16811, 
16807, 17033, 16821, 16809), class = "Date"), RESULT = c(3L, 
2L, 1L, 5L, 4L, 3L, 6L)), row.names = c(NA, -7L), class = "data.frame")

df
> df
   ACCT  TEST_DATE RESULT
1 37733 2016-01-09      3
2 37733 2016-08-10      2
3 37733 2016-01-11      1
4 37733 2016-01-07      5
5 37734 2016-08-20      4
6 37734 2016-01-21      3
7 37733 2016-01-09      6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65675527

复制
相关文章
【Hive】从长格式表到宽格式表的转换
使用sql代码作分析的时候,几次遇到需要将长格式数据转换成宽格式数据,一般使用left join或者case when实现,代码看起来冗长,探索一下,可以使用更简单的方式实现长格式数据转换成宽格式数据。
1480
2019/05/22
2.4K0
深入Python数据分析:数据由长格式变为宽格式
melt()的逆操作在Pandas中对应为 pivot(),它也是一个设计上的顶层函数,工程位置如下:
double
2019/05/27
1.5K0
iOS 计算NSString宽高与计算NSAttributedString的宽高
开篇 项目有一个客服反馈功能,用到的是聊天列表的形式,这就免不了计算字符串的宽高,由于要给字符串加间距,没办法,只能用 NSAttributedString 所以要计算NSAttributedString的长宽 计算NSString宽高 计算NSString宽高很简单,代码如下: //返回字符串所占用的尺寸. - (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize { NSDictionary *attrs = @{NSFontAt
GuangdongQi
2018/05/24
5.2K0
宽表的缺点
宽表在BI业务中比比皆是,每次建设BI系统时首先要做的就是准备宽表。有时系统中的宽表可能会有上千个字段,经常因为“过宽”超过了数据库表字段数量限制还要再拆分。
磊哥
2023/02/16
2.3K0
宽表的缺点
php宽字节注入,[投稿]宽字节注入详解
在mysql中,用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等,还有一种情况是magic_quote_gpc,不过高版本的PHP将去除这个特性。
全栈程序员站长
2022/11/04
3.5K0
php宽字节注入,[投稿]宽字节注入详解
TextField的高宽autosize[通俗易懂]
var t_name:TextField = new TextField; trace(t_name.height); trace(t_name.width);
全栈程序员站长
2022/08/28
1.1K0
宽字节注入是什么_sqlmap宽字节注入
在一个CTF练习的网站,看到了一个宽字节注入的题目,我是一个web萌新,没什么经验,一开始也没有想到是宽字节,还是一位朋友给我提到的,让我猛然大悟,咳咳。。。做一些总结。
全栈程序员站长
2022/11/04
1.9K0
宽字节注入是什么_sqlmap宽字节注入
手动测量 View 的宽高
手动调用 View 的 measure(int widthMeasureSpec,int heightMeasureSpec) 方法来得到 View 的宽高。
HelloVass
2018/09/12
1.5K0
1宽币=883?山本宽称要发行自己的数字货币
前两天,专门做日本御宅商品在海外销售的  Tokyo Otaku Mode 发布公告打算搞个面向 ACG 行业的数字货币「Otaku Coin」,希望能够未来通过「宅币」连接消费者和创作者,让阿宅们在日常观看动画、漫画玩游戏的时候也可以获得宅币,再将宅币支援给创作者,形成良性循环。虽然「宅币」面临的问题还有很多但想法还不错,而且 Tokyo Otaku Mode 也不会说跑路就跑路。而山本宽今天突然在自己的动画公司官网上发布消息,称自己也要发行数字货币 Twilight 币,构思和人家「宅币」一模一样…
企鹅号小编
2018/01/22
9440
1宽币=883?山本宽称要发行自己的数字货币
按照原宽高获得等比新宽高
随便贴代码 点击(此处)折叠或打开 #include <stdio.h> int get_divisor(int x, int y) { int ret = 0; while (x%y != 0) {                 ret = x % y;                 x = y;                 y = ret; }         return ret; } int get_height(int width
用户3765803
2019/03/05
9020
宽字节注入(2)
昨晚折腾了一晚上,把大致的一些东西整理了下,为团队纳新选了几首音乐素材..然后团队的一个表弟来问我宽字节注入的事情了...然后就就才抽空写了一点作为上一篇mysql注入的补充。 本来昨天参加t00ls
lonelyvaf
2018/06/07
7720
世界上最长寿的泡泡:加点东西,生命延长到465天
故事的主人公是一个叫圆圆的小女孩,她的父母为改善大西北的生态环境奉献了整个青春,但由于供水成本过高,他们辛辛苦苦建立起来的城市——丝路市依然难逃废弃的命运。
机器之心
2022/02/23
1910
世界上最长寿的泡泡:加点东西,生命延长到465天
世界上最长寿的泡泡:加点东西,生命延长到465天
来源:机器之心本文共2200字,建议阅读5分钟和普通泡泡1分钟的短暂美丽相比,这个泡泡的生命足足延长了20万倍。 十多年前,科幻作家刘慈欣写过一个有趣的小故事。 故事的主人公是一个叫圆圆的小女孩,她的父母为改善大西北的生态环境奉献了整个青春,但由于供水成本过高,他们辛辛苦苦建立起来的城市——丝路市依然难逃废弃的命运。 圆圆本人的梦想则比较简单,她只想吹出一个大大的泡泡。对此,圆圆的爸爸忧心忡忡,因为他认为女儿追求的是美丽、新奇而虚幻的东西。长大之后,圆圆凭借自己学到的东西创立了一个资产数亿的公司,但她的梦想
数据派THU
2022/03/04
2680
Activity中获取View的宽高
有些时候我们需要获取到View的宽高信息。在onCreate和onResume中尝试view.getWidth()或是view.getHeiht()时,我们会发现获取到的是0。 Activity视图在创建完成后,各个子view并不一定被加载完成。 获取宽高正确的方法有哪些呢?
AnRFDev
2021/02/01
1.7K0
人群创建的基础:画像宽表
​本节主要介绍人群创建所依赖的画像宽表的生成方式。为什么要创建画像宽表?基于原始的标签数据表进行人群圈选有什么问题?如何生成画像宽表?针对这些问题本节会给出详细解答。
张叔叔讲互联网
2023/10/16
6920
人群创建的基础:画像宽表
宽字节注入讲解
我讨厌现在的自己,一边压抑着自己的情绪,一边装作没事的样子,一到深夜就彻底崩溃了,天亮后还要微笑面对生活。。。
全栈程序员站长
2022/11/04
6300
宽字节注入讲解
不定宽高的水平垂直居中
 CSS3方法一: 1 //父元素相对定位 2 parent{position:relative;} 3 //子元素相对定位后偏移 4 child{position: absolute; top:50%; left: 50%; -webkit-transform:translate(-50%,-50%)} CSS3方法二: 1 //给父元素添加如下属性 2 parent{ display: -webkit-box; -webkit-box-pack:center; -webkit-box-align:cen
小古哥
2018/03/08
7680
sql–宽字节注入
宽字节注入是利用msql的一个特性,mysql在使用GBK编码的时候,会认为俩个字符是一个汉字GBK编码,它的编码范围是0×8140~0xFEFE(不包括xx7F),在遇到%df(ascii(223)) >ascii(128)时自动拼接%5c,因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了。通常导致编码转换的注入问题,尤其是使用php连接mysql数据库的时候,一个gbk汉字占两个字节,取值范围是(编码位数):第一个字节是(129-254),第二个字节(64-254)当设置gbk编码后,遇到连续两个字节,都符合gbk取值范围,会自动解析为一个汉字。
字节脉搏实验室
2020/04/07
9260
sql–宽字节注入
Facebook泄漏升级:受影响用户增长到8700万
美国时间 4 月 4 日,Facebook 的首席技术官 Mike Schroepfer 在官网发布声明,描述了数据泄露事件之后 Facebook 近期采取的一系列加强隐私保护的措施。但他同时也表示,Cambridge Analytica 从 Facebook 获取的用户信息高达 8700 万,比之前的 5000 万多出不少。其中,超过 80% 的用户都是美国人。
FB客服
2018/07/30
3820
Facebook泄漏升级:受影响用户增长到8700万
点击加载更多

相似问题

长到宽格式

10

长到宽格式R

29

Dataframe长到宽格式

29

长到宽格式的倍数

10

SQLite长到宽的格式?

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档