我想实现某种循环来将数据帧中的所有变量与常量进行制表,常量是另一个变量。
例如,假设我有一个包含3个变量的数据帧,例如下面的虚拟数据,我想生成给定的表。
df <- data.frame(V1 = factor(c("L", "L", "XL", "M", "S", "XXL")),
V2 = factor(c("Tall", "Medium", "Tall", "Small", "Small", "Very Tall")),
V3 = factor(c("Vegan", "Vegetarian", "Non-V", "Vegan", "Non-V", "Non-V")))
attach(df)
table(V3, V3)
table(V3, V2)
table(V3, V1)
我的目标是创建每个单独的表并将它们编译成一个列表。一旦进入列表,我就可以使用匿名函数的组合进行感兴趣的计算并应用家庭调用。但是,我需要找到一种方法来在具有许多变量的大型数据集上创建这些表,而无需手动创建每个变量的繁琐工作。
我尝试过使用lapply
,sapply
和for
循环,但似乎找不到适用于我的方法。有没有办法在所有变量中创建表并将它们放入列表中?
答案 0 :(得分:1)
要将一个变量与data.frame中的所有其他变量进行比较,然后返回一个列表,您可以像这样使用lapply
。
lapply(df[-1], table, df[,1])
$V2
L M S XL XXL
Medium 1 0 0 0 0
Small 0 1 1 0 0
Tall 1 0 0 1 0
Very Tall 0 0 0 0 1
$V3
L M S XL XXL
Non-V 0 0 1 1 1
Vegan 1 1 0 0 0
Vegetarian 1 0 0 0 0
df[-1]
表示df中除第一个变量外的所有变量。请注意df[,1]
中的逗号,该逗号返回向量而不是单个元素列表,以便在table
中使用。
如果要构建非相同变量对(v1-v2,v1-v3,v2-v3)的表列表,可以使用combn
。 simplify = FALSE参数返回一个列表。
combn(df, 2, FUN=table, simplify=FALSE)
[[1]]
V2
V1 Medium Small Tall Very Tall
L 1 0 1 0
M 0 1 0 0
S 0 1 0 0
XL 0 0 1 0
XXL 0 0 0 1
[[2]]
V3
V1 Non-V Vegan Vegetarian
L 0 1 1
M 0 1 0
S 1 0 0
XL 1 0 0
XXL 1 0 0
[[3]]
V3
V2 Non-V Vegan Vegetarian
Medium 0 0 1
Small 1 1 0
Tall 1 1 0
Very Tall 1 0 0
如果您还希望自己获取每个变量的表,那么
lapply(1:2, function(i) combn(df, i, FUN=table, simplify=FALSE))
将生成一个嵌套的表列表。