R中的countif在每一行中重复出现

时间:2016-02-06 03:10:01

标签: r sum countif

我在尝试复制excel中熟悉的一些countif函数时遇到了麻烦。我有一个数据框,它有很多行。我正在尝试使用2个变量(x& z)并对我的数据框中有多少其他变量进行比较。我想出了:

sum('mydataframe'$x==`mydataframe`$x[1]&`mydataframe'$z==`mydataframe`$z[1])

这为我提供了第一行[1]的整个数据集中x& z的正确countif。问题是我必须使用它[1]。我尝试过使用(with,...)命令,但后来我再也无法访问整个列了。

我希望能够计算x&数据框中每行的z组合然后将该输出作为新向量输出,我可以将其添加为另一列。而且我希望每一行都能持续到最后。

希望这很简单。我认为某些组合(with,..)或者应用或者某些东西都可以做到,但我太新了。

我对每个实例中的计数总数感兴趣,而不是正在运行的顺序计数。

2 个答案:

答案 0 :(得分:1)

您似乎想要一种方法来创建一个新列,其中包含整个数据框中的行数,xz值等于这些变量的值行。

使用一些示例数据:

(dat <- data.frame(x=c(1, 1, 2), z=c(3, 3, 3)))
#   x z
# 1 1 3
# 2 1 3
# 3 2 3

一种简单的方法是使用dplyr group_by函数进行分组,然后创建一个包含该组中元素数量的新列:

library(dplyr)
dat %>% group_by(x, z) %>% mutate(n=n())
#       x     z     n
#   (dbl) (dbl) (int)
# 1     1     3     2
# 2     1     3     2
# 3     2     3     1

基础R解决方案可能涉及ave

dat$n <- ave(rep(NA, nrow(dat)), dat$x, dat$z, FUN=length)
dat
#   x z n
# 1 1 3 2
# 2 1 3 2
# 3 2 3 1

答案 1 :(得分:0)

使用data.table的选项是转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(dat)),分组由&#39; x&#39;,&#39; z&#39;和 分配&#39; n&#39;作为每个组中元素的数量(.N)。

library(data.table)
setDT(dat)[, n:= .N, by = .(x,z)]
dat
#   x z n
#1: 1 3 2
#2: 1 3 2
#3: 2 3 1