按数据分组为详细数据

时间:2019-10-10 12:01:21

标签: python r dataframe

****说明图片已通过链接附加了****

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

column 1 : groups (A,B,C,D....)
column 2 : classification (0,1,2)
column 3 : # of observation per group per classification.

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

group, class, count
A ,      0 ,    1
A ,      1 ,    2
B ,      0 ,    2

我需要将上表更改为:

group, class
A ,     0
A ,     1
A ,     1
B ,     0
B ,     0

enter image description here 有什么想法吗?

最终它应该是4,000,000个观察值,因此代码应该高效 试图在一个循环中运行一个循环(运行14个小时创建了300,000行)

试图使用聚合(在R中),但是没有用。

谢谢!

2 个答案:

答案 0 :(得分:0)

这是R中的data.table方法:

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

输入为:

dt = fread("group, class, count
           A ,      0 ,    1
           A ,      1 ,    2
           B ,      0 ,    2")

答案 1 :(得分:0)

如果您喜欢tidyverse,这是一种解决方案,它可以执行@docendo的操作,但速度较慢且不太优雅:

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