创建一个值为0而不是NULL的向量,当计数TRUE的数量时

ds97pgxw  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(138)

我想计算一个变量的TRUE的数量,用于另一个变量的每个类别。或者更准确地说,每个类别的TRUE的平均数量。之后,我想创建一个向量。
当变量(如Var2)同时包含TRUEFALSE值时,我使用的代码可以正常工作。然而,当像Var3这样的变量只包含FALSE时,我的代码创建了一个值为NULL的向量。不过,我想它创建一个向量的值为0的每个类别。
有什么想法吗?
下面是一个示例:

df <- data.frame(
  Var1 = c("A", "B", "A", "B", "A", "C"),
  Var2 = c(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE),
  Var3 = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE)
)
#creating some data

count1 = as.vector(tapply(df$Var1, df$Var2, table)$'TRUE')/nrow(df)
#this works fine

count2 = as.vector(tapply(df$Var1, df$Var3, table)$'TRUE')/nrow(df)
#this not. It creates only a NULL-vector

count1是inteded,但count2是NULL向量。
谢谢你,谢谢

prdp8dxp

prdp8dxp1#

下面是如何在基R中动态构建它,而不必显式命名变量。

i1 <- as.formula(paste("cbind(", 
                       paste(setdiff(names(df), "Var1"), collapse = ", "),
                       ") ~ Var1"))
res <- aggregate(i1, df,  \(i) sum(i) / nrow(df))

res
# Var1      Var2 Var3
#1    A 0.5000000    0
#2    B 0.0000000    0
#3    C 0.1666667    0

相关问题