在 R 中将聚合计数数据转换为单个数据
Transforming Aggregate Count Data into Individual Data in R
我有一个聚合计数数据库,我想重塑它,使每一行对应一个个体:
在本例中,C 列表示聚合计数数据
数据集1
[A] [B] [C]
[1] A1 B1 4
[2] A2 B2 2
[3] A3 B3 1
我想将其转换为:
数据集2
[A] [B]
[1] A1 B1
[2] A1 B1
[2] A1 B1
[3] A1 B1
[4] A2 B2
[5] A2 B2
[6] A3 B3
我查看了 R 中的 reshape 包,但我不确定是否有一个函数可以完成这项任务。感谢您的帮助!
使用base
R
as.data.frame(lapply(df[1:2], rep, df$C))
A B
1 A1 B1
2 A1 B1
3 A1 B1
4 A1 B1
5 A2 B2
6 A2 B2
7 A3 B3
数据
df = data.frame('A' = c('A1', 'A2', 'A3'), 'B' = c('B1', 'B2', 'B3'), 'C' = c(4,2,1))
这是另一个使用 base R 的解决方案:
inds <- rep(seq_len(nrow(df1)), df1$C)
df2 <- df1[inds,]
将最后一行改为
df2 <- df1[inds, 1:2]
删除列 C
。
这给出了与 Nad Pat 的答案不同的行名称。使用哪种可能是个人喜好问题。
采用data.table方法
library(data.table)
data1 <- data.table(A=LETTERS[1:4], B=letters[1:4], C=1:4)
data1[, lapply(.SD, rep, C)][, -c("C")]
我有一个聚合计数数据库,我想重塑它,使每一行对应一个个体:
在本例中,C 列表示聚合计数数据
数据集1
[A] [B] [C]
[1] A1 B1 4
[2] A2 B2 2
[3] A3 B3 1
我想将其转换为: 数据集2
[A] [B]
[1] A1 B1
[2] A1 B1
[2] A1 B1
[3] A1 B1
[4] A2 B2
[5] A2 B2
[6] A3 B3
我查看了 R 中的 reshape 包,但我不确定是否有一个函数可以完成这项任务。感谢您的帮助!
使用base
R
as.data.frame(lapply(df[1:2], rep, df$C))
A B
1 A1 B1
2 A1 B1
3 A1 B1
4 A1 B1
5 A2 B2
6 A2 B2
7 A3 B3
数据
df = data.frame('A' = c('A1', 'A2', 'A3'), 'B' = c('B1', 'B2', 'B3'), 'C' = c(4,2,1))
这是另一个使用 base R 的解决方案:
inds <- rep(seq_len(nrow(df1)), df1$C)
df2 <- df1[inds,]
将最后一行改为
df2 <- df1[inds, 1:2]
删除列 C
。
这给出了与 Nad Pat 的答案不同的行名称。使用哪种可能是个人喜好问题。
采用data.table方法
library(data.table)
data1 <- data.table(A=LETTERS[1:4], B=letters[1:4], C=1:4)
data1[, lapply(.SD, rep, C)][, -c("C")]