计算每列的分类变量(“是”)

时间:2016-11-23 11:26:45

标签: r aggregate-functions

你能帮我算一下每种成分的YES答案数

我有一个数据集:

beef  beet_broth  beef_liver  beer  chicken
Yes      Yes         No       Yes    No
No       Yes         No       Yes    No
No       No          Yes      Yes    No
Yes      Yes         No       Yes    No

我想知道每列中YES的总和,如果0则不会出现在结果中:

Beef - 2 
Beef_broth - 3
Beef_liver - 1
Beer - 4 

我有数据集:384列,57 691行

2 个答案:

答案 0 :(得分:2)

我们可以使用read(a); read(b); result := gcd(a, b); i := 3; while(i <= n){ read(a) result := gcd(result, a); } print(result); 查找每列的colSums值的数量(因为"Yes"等于1而TRUE等于零),然后是更高值的子集比零。

FALSE

答案 1 :(得分:1)

使用plyr可能有一种更优雅的方式,但以下似乎是你想要的:

> yesses = sapply(recipes,FUN = function(x){length(x[x=="Yes"])})
> yesses
      beef beet_broth beef_liver       beer    chicken 
         2          3          1          4          0 
> yesses[yesses > 0]
      beef beet_broth beef_liver       beer 
         2          3          1          4 

开启编辑。工作原理:数据帧是列向量列表。 sapply获取列表和函数,并在列表中应用函数,将结果作为向量返回。在上面我使用了一个匿名函数,它使用逻辑子集来获取一列并提取等于“是”的条目。生成的子向量的长度是所需的计数。你可以先这样定义这个函数:

countYes = function(v){length(v[v=="Yes"])}

然后将yesses定义为:

yesses = sapply(recipes,countYes)

完全如上所述。

免责声明:我对R本人比较陌生,但对Python有很多经验。我通常认为如何使用Python列表解析来解决问题,然后在R中解释它,这通常涉及apply族中的子集和函数的某种组合。生成的代码可以根据需要运行,但可能不是非常惯用的。