计算R中每n行的出现次数

时间:2017-03-26 15:05:18

标签: r

我有一个包含a列的数据框:

x = data.frame(
    "a" = c(F, F, F, T,
            F, T, T, F,
            T, T, F)
)

我想知道每一个例如4行是a T的频率,并将此值应用于新列b,因此对于前4行,T的频率为1 / 4,对于接下来的4行,T的频率为2/4,其余3行的频率为T为2/3:

x$b = c(0.25,0,25,0.25,0.25
        0.5,0.5,0.5,0.5,
        0.66,0.66,0.66)

我可以使用a获取列tapply的频率,但这会给我一个列表,而不是结果。

如果不使用外部库,我会很感激。

2 个答案:

答案 0 :(得分:3)

一个选项是来自ave的{​​{1}}。使用base R创建分组变量,默认函数glave,它取逻辑列'a'的平均值来获取输出

mean

或在x$b <- with(x, ave(a, as.integer(gl(nrow(x), 4, nrow(x))))) x$b #[1] 0.2500000 0.2500000 0.2500000 0.2500000 0.5000000 0.5000000 #[7] 0.5000000 0.5000000 0.6666667 0.6666667 0.6666667

中使用相同的方法
data.table

library(data.table) setDT(x)[, b := mean(a), .(grp= as.integer(gl(nrow(x), 4, nrow(x))))] x # a b # 1: FALSE 0.2500000 # 2: FALSE 0.2500000 # 3: FALSE 0.2500000 # 4: TRUE 0.2500000 # 5: FALSE 0.5000000 # 6: TRUE 0.5000000 # 7: TRUE 0.5000000 # 8: FALSE 0.5000000 # 9: TRUE 0.6666667 #10: TRUE 0.6666667 #11: FALSE 0.6666667

dplyr

答案 1 :(得分:2)

我们可以使用基础R version: "2.0" services: consul: image: consul:latest ports: - "8500:8500" my-service: build: path/to/dockerfile depends_on: - consul links: - consul:consul 。我们可以创建一组每个ave元素,并找出每个组的总元素的TRUE元素数量的比率。

n