我有这个列表(我们只关心它是 2 个表的列表)
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
如下
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
我尝试包含函数
spread
来解决这个问题,但对我不起作用。
table
对象可以转换为matrix
和data.frame
,以便它保持相同的结构
L1 <- lapply(L, as.data.frame.matrix)
-输出
> str(L1)
List of 2
$ :'data.frame': 2 obs. of 2 variables:
..$ 4: int [1:2] 4 3
..$ 5: int [1:2] 2 1
$ :'data.frame': 2 obs. of 2 variables:
..$ 28: int [1:2] 3 1
..$ 29: int [1:2] 2 4
> L1
[[1]]
4 5
0 4 2
1 3 1
[[2]]
28 29
19 3 2
20 1 4
如果我们需要
proportions
lapply(L, \(x) 100 *as.data.frame.matrix(proportions(x)))