我在尝试复制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,..)或者应用或者某些东西都可以做到,但我太新了。
我对每个实例中的计数总数感兴趣,而不是正在运行的顺序计数。
答案 0 :(得分:1)
您似乎想要一种方法来创建一个新列,其中包含整个数据框中的行数,x
和z
值等于这些变量的值行。
使用一些示例数据:
(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