使用一个常量变量针对所有其他变量从数据框创建多个表

时间:2017-02-13 19:43:34

标签: r dataframe iteration

我想实现某种循环来将数据帧中的所有变量与常量进行制表,常量是另一个变量。

例如,假设我有一个包含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)

我的目标是创建每个单独的表并将它们编译成一个列表。一旦进入列表,我就可以使用匿名函数的组合进行感兴趣的计算并应用家庭调用。但是,我需要找到一种方法来在具有许多变量的大型数据集上创建这些表,而无需手动创建每个变量的繁琐工作。

我尝试过使用lapplysapplyfor循环,但似乎找不到适用于我的方法。有没有办法在所有变量中创建表并将它们放入列表中?

1 个答案:

答案 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))

将生成一个嵌套的表列表。