基本:使用SUM函数在DataFrame上进行COUNTIF

时间:2015-07-02 13:48:37

标签: r

在尝试了之前推荐的类似挑战之后,我仍然迷失了,也许我错过了一些简单的事情。

我有两个数据框 Uniques Uniques2

Uniques 中,我有一个包含49,999行变量的列。

Uniques2 中,我已将独特变量分开,总共得出403.

现在,我想计算 Uniques $ aa.IndustryGroup 中某个列中 Uniques2 $ aa.IndustryGroup 中的每个变量出现的次数。我希望它显示在 Uniques2 数据框中的新列 $ Count 中。

以前的堆栈question建议使用==和SUM来找出答案,我认为这很简单。

所以我试过了,

Uniques2$Count = data.frame(sum(Uniques$aa.IndustryGroup == Uniques2$aa.IndustryGroup))

它返回有关长度的错误,我知道这意味着我不是要求它做我想要的正确。

Error in `$<-.data.frame`(`*tmp*`, "Count", value = list(sum.Uniques.aa.IndustryGroup....Uniques2.aa.IndustryGroup. = 138L)) : 
replacement has 1 row, data has 403
In addition: Warning messages:
1: In is.na(e1) | is.na(e2) :
longer object length is not a multiple of shorter object length
2: In `==.default`(Uniques$aa.IndustryGroup, Uniques2$aa.IndustryGroup) :
longer object length is not a multiple of shorter object length

感谢您成为一个出色的社区并留下了一串面包屑。没有你,这次冒险的成功是不可能的。

1 个答案:

答案 0 :(得分:1)

  

现在我想计算每个变量的时间   Uniques2 $ aa.IndustryGroup出现在某个列中   不重复$ aa.IndustryGroup。我希望它显示在一个新列中   $在Uniques2数据框中计数。

# reproducible example!
set.seed(123)
Uniques <- data.frame(aa.IndustryGroup=sample(LETTERS,49999,replace=T))
Uniques2 <- data.frame(aa.IndustryGroup=LETTERS)

Uniques2$Count <- sapply(Uniques2$aa.IndustryGroup, 
                         function(x) sum(Uniques$aa.IndustryGroup==x))

说明:您尝试的内容有两个问题:首先,您无法在向量data.frame中存储Uniques2$Count。其次,你不能进行矢量比较v1 == v2,因为你知道这些矢量的长度不同,你真的在​​问v2的每个元素,它在v1中出现了多少次。 apply家庭是一个很好的方法。