首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按数据分组到明细数据

按数据分组到明细数据
EN

Stack Overflow用户
提问于 2019-10-10 20:01:22
回答 2查看 41关注 0票数 0

*图解图片已通过链接附加*

我有一个数据框架,它的观察结果分组如下:

代码语言:javascript
复制
column 1 : groups (A,B,C,D....)
column 2 : classification (0,1,2)
column 3 : # of observation per group per classification.

我需要将数据转换为详细的数据,其中观察结果不会按组显示。示例

代码语言:javascript
复制
group, class, count
A ,      0 ,    1
A ,      1 ,    2
B ,      0 ,    2

我需要将上面的表格更改为:

代码语言:javascript
复制
group, class
A ,     0
A ,     1
A ,     1
B ,     0
B ,     0

enter image description here有什么想法吗?

最终,它应该是4,000,000个观察值,所以代码应该是有效的尝试在循环中运行一个循环(14小时运行创建了300,000行)

尝试使用aggregate (在R中),但不起作用。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-10-10 20:27:30

下面是R中的data.table方法:

代码语言:javascript
复制
library(data.table)
setDT(dt)
dt = dt[, .(class = rep(class, count)), by = .(group)]

print(dt)
#    group class
# 1:     A     0
# 2:     A     1
# 3:     A     1
# 4:     B     0
# 5:     B     0

输入为:

代码语言:javascript
复制
dt = fread("group, class, count
           A ,      0 ,    1
           A ,      1 ,    2
           B ,      0 ,    2")
票数 0
EN

Stack Overflow用户

发布于 2019-10-10 20:45:00

如果你更喜欢tidyverse,这里有一个解决方案,它可以做@docendo做过的事情,但速度更慢,不那么优雅:

代码语言:javascript
复制
require(tidyr)
require(dplyr)
data %>% group_by(group,class) %>% 
  mutate(helper=paste(rep(class,count),collapse=" ")) %>% 
  separate_rows(helper) %>% 
  select(group,class)

# A tibble: 5 x 2
# Groups:   group, class [3]
  group class
* <chr> <int>
1 A         0
2 A         1
3 A         1
4 B         0
5 B         0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58322458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档