如何解决按组有效重复观察 数据
我正在尝试找到一种有效的方法,仅针对某些组在 data.table 中按组重复行。请考虑以下示例:
library(data.table)
DT <- data.table(x = c("A","A","B","C","D","D"),y = 1:8)
这个数据集看起来像:
head(DT)
x y
1: A 1
2: A 2
3: B 3
4: B 4
5: C 5
6: C 6
假设我有一个单独的向量 rep <- c("A","C")
。给定这个向量,我希望能够将 A 的 所有 行重复三次(由于 rep 中“A”字符的基数)和与 B 关联的所有行两次。因此,最终的数据集应该是:
x y
1: A 1
2: A 2
3: A 1
4: A 2
5: A 1
6: A 2
7: B 3
8: B 4
9: B 3
10: B 4
11: C 5
12: C 6
请注意,我没有重复“C”,因为“C”的基数在 rep
中只有 1。目前,我有一种执行此过程的骇人听闻的方法,但我想知道是否有更有效的 data.table 方法来执行上述操作。
谢谢!
附言我这样做的原因是因为我在回归中进行了一些替换匹配,有时,同一控制公司被分配给多个处理公司。
解决方法
data.table 合并不会给你相同的排序,但你不应该依赖数据表中的排序,无论如何:
merge(DT,data.frame(x=rep),by="x")
x y
1: A 1
2: A 1
3: A 1
4: A 2
5: A 2
6: A 2
7: B 3
8: B 3
9: B 4
10: B 4
11: C 5
12: C 6
,
我们可以做到
DT[ data.table(x = v1)[,.N,x],on = .(x)][rep(seq_len(.N),N)]
或按相同顺序返回
DT[,.(y = list(y)),x][data.table(x = v1),on = .(x)][,.(x,y = unlist(y))]
数据
v1 <- c("A","A","B","C")
,
一种解决方案是收集计数并左连接它们:
library(data.table)
library(data.table)
DT <- data.table(x = c("A","C","D","D"),y = 1:8)
rep_vec <- c("A","C")
rep_DT <- DT %>%
left_join(data.frame(group = rep_vec),by = c("x" = "group"))
您确定在数据框中复制行是您的理想选择吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。