我有一个简单的问题。我想用原始表的3个变量制作一个频率表。如果我这样做
as.data.frame(table(df$var1,df$var2,df$var3))
由于它提供了3个变量的所有可能组合,并且每个变量都有很多值,所以我得到一个错误:“试图用> = 2 ^ 31个元素组成一个表”。
问题在于许多组合实际上是空的。换句话说,其中许多可能的组合的频率为0,因此我想知道如何使R仅考虑非空频率(以便函数table()使用我的3个变量而不会给出错误信息。
有什么主意吗?
非常感谢您阅读。
一个非常简化的表(不是我原来的表-因为我有很多值,所以当运行“ as.data.frame(table())¨时,这三个表的笛卡尔积超出了2 ^ 31个元素)可以是:
var1 var2 var3 var4 var5
0 a1 1234 a 1
1 a2 1234 b 2
1 a2 1235 c 2
1 a2 1235 a 7
1 a1 1235 d 3
我想要的是代码中前三个变量的频率:
as.data.frame(table(df$var1,df$var2,df$var3))
这是我正在尝试的事情:
subset(table(df$var1,df$var2,df$var3),table(df$var1,df$var2,df$var3)$Freq!='0')
或
droplevels(table(df$var1,df$var2,df$var3))
没有运气。
在为我的示例概述的情况下,代码as.data.frame(table(df $ var1,df $ var2,df $ var3))提供了这样的表格-如您所知,创建了一个额外的变量“ Freq “,它给出了该行中3个变量的每种组合出现的时间:
var1 var2 var3 Freq
0 a1 1234 1
0 a1 1235 0
0 a2 1234 0
0 a2 1235 0
1 a1 1234 0
1 a1 1235 1
1 a2 1234 1
1 a2 1235 1
但是,正如我所说的那样,由于频率为0的行很多,因此在运行函数table()时不考虑R可能会使R的计算显着简化,其元素少于2 ^ 31,因此可以提供结果,而不会出现任何错误消息。因此,如果可用,在应用此替代方法后,我期望的结果是这样的(其中在运行table()时不计算所有Freq = 0的行):
var1 var2 var3 Freq
0 a1 1234 1
1 a1 1235 1
1 a2 1234 1
1 a2 1235 1
答案 0 :(得分:0)
好吧,我想我找到了解决方案。基本上是这样:
a <-summarise(group_by(df,var1,var2,var3),count = n())