****说明图片已通过链接附加了****
我有一个数据框,其观察结果分组如下:
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中),但是没有用。
谢谢!
答案 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