我有一个包含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
的频率,但这会给我一个列表,而不是结果。
如果不使用外部库,我会很感激。
答案 0 :(得分:3)
一个选项是来自ave
的{{1}}。使用base R
创建分组变量,默认函数gl
为ave
,它取逻辑列'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