我有一个数据框列表。
每个数据框都是按人命名的,每个数据框都包含事件(行)。每个事件的列称为“事件指示”和“活检数量”。我想创建一个摘要数据框(或矩阵?),告诉我每个人为每个指示采取多少活检。
List of 3
$ :'data.frame': 3 obs. of 2 variables:
..$ Indication: Factor w/ 2 levels "AbdoPain","Vomiting": 1 2 1
..$ NumOfBx : num [1:3] 2 3 1
$ :'data.frame': 4 obs. of 2 variables:
..$ Indication: Factor w/ 3 levels "AbdoPain","Anaemia",..: 2 2 1 3
..$ NumOfBx : num [1:4] 12 23 1 5
$ :'data.frame': 4 obs. of 2 variables:
..$ Indication: Factor w/ 3 levels "AbdoPain","Anaemia",..: 2 1 3 3
..$ NumOfBx : num [1:4] 1 2 3 7
结果:
dfMrBen dfJohn dfStuart
Abdo pain
Vomiting
Anaemia
我认为这可能是一个拆分 - 应用 - 合并问题,但我不知道如何结合起来得到如上所述的摘要。目前我有:
ReportOp<-function(x){
#To extract the dataframe name
theName<-x
#To extract the dataframe data
x<-data.frame(Dxlst[[x]])
grp<-x%>% group_by(Indication %>% summarise(mean=mean(NumberOfBx)
}
lapply(names(Dxlst,ReportOp)
但这只是给出了每个数据帧的摘要。我如何组合基本上将数据帧添加到一起以获得预期的结果?
答案 0 :(得分:1)
首先将数据合并到一个大数据框中,或者在摘要后用
执行此操作do.call(rbind, Dxlst)
或首先将ID添加到每个列表中,然后rbind
将它们组合在一起,如下所示:
Dxlst <- lapply(1:length(Dxlst),
function(x) cbind(Dxlst[[x]],
id = rep(x,nrow(Dxlst[[x]]))))
do.call(rbind, Dxlst)
答案 1 :(得分:0)
不完全是你想要的。但它很接近。此外,您应该组合数据框,然后进行更简单的摘要。
创建数据: -
df1=data.frame(Indication=as.factor(sample(c(0,1), 10, replace = T)), Bx=sample(1:10, 10, replace = T))
df2=data.frame(Indication=as.factor(sample(c(0,1,2), 10, replace = T)), Bx=sample(1:10, 10, replace = T))
l=list(df1,df2)
然后
l=lapply(l, function(x) aggregate( Bx ~ Indication, x, sum))
m=max(sapply(l, nrow))
n=lapply(l, function(x){ x <- x[seq_len(m),]; row.names(x) <- NULL; x})
do.call('cbind',n)
我输出如下:
Indication Bx Indication Bx
1 0 18 0 9
2 1 28 1 35
3 <NA> NA 2 18