R 中的 countif 在每一行中重复

countif within R repeated across each row

我在尝试复制我在 excel 中熟悉的一些 countif 函数时遇到了问题。我有一个数据框,它有很多行。我正在尝试获取 2 个变量(x 和 z)并计算我的数据框中有多少其他变量与它匹配。我想到了这样做:

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

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

我希望能够对数据框中每一行的 x 和 z 组合进行计数,然后将该输出作为一个新向量,我可以将其添加为另一列。我希望每一行都如此,直到最后。

希望这很简单。我认为 (with,..) 或 apply 或某物的某种组合可以做到这一点,但我太新了。

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

您似乎在寻求一种方法来创建一个新列,其中包含整个数据框中的行数,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

一种简单的方法是使用 dplyrgroup_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

使用 data.table 的选项是将 'data.frame' 转换为 'data.table' (setDT(dat)) ,按 'x'、'z' 分组和 分配 'n' 作为每个组中的元素数 (.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