【问题标题】:Grouped by data to detailed data按数据分组到详细数据
【发布时间】:2019-10-10 12:01:21
【问题描述】:

****图片已通过链接附上****

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

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 中),但没有用。

谢谢!

【问题讨论】:

  • 请发布您拥有的具有预期输出的数据框示例以及您已经拥有的代码。这会让你更容易理解你想要什么。

标签: python r dataframe


【解决方案1】:

这是 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")

【讨论】:

    【解决方案2】:

    如果您更喜欢 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多