R语言:如何将表格列表转换为数据框列表且保留原格式?
问题:保留原表格格式将table列表转为数据框列表
我有一个包含2个table对象的列表,具体代码如下:
set.seed(222) df = data.frame(x = trunc(runif(10,0,2)), y = trunc(runif(10,4,6)), z = trunc(runif(10,19,21)), m = trunc(runif(10,28,30))) df t1 = table(df$x,df$y) t2=table(df$z,df$m) L = list(t1,t2)
当我使用lapply(L,as.data.frame)进行转换时,得到的结果为:
[[1]] Var1 Var2 Freq 1 0 4 0 2 1 4 2 3 0 5 5 4 1 5 3 [[2]] Var1 Var2 Freq 1 19 28 2 2 20 28 3 3 19 29 3 4 20 29 2
该结果改变了原table的格式,我尝试使用spread函数修复此问题但未成功,请问如何将表格列表转换为数据框列表且不改变原表格的格式?
解决方案
使用as.data.frame.matrix()替代as.data.frame(),这个函数会保留原table的宽格式结构,和原table的行列布局完全一致:
lapply(L, as.data.frame.matrix)
执行后输出结果:
[[1]] 4 5 0 0 5 1 2 3 [[2]] 28 29 19 2 3 20 3 2
原理说明
as.data.frame()默认会将table对象转换为长格式的频数表(Var1/Var2/Freq三列),而as.data.frame.matrix()会将table视为矩阵直接转换,保留原有的行、列分组结构,完美匹配原table的格式。
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

