我有一个包含多列的数据框 df。我想计算满足一定数量的不等式的值。对于两个给定的变量,我将使用:
res <- sum(df$column1 > x1 & df$column2 > x2)
但是,我希望它更加灵活,采用可变数量的列名和关联的值,例如:
columns <- c("column1", "column2", ..., "columnn")
values <- c(x1, x2, ..., xn)
res <- sum(df$column1 > x1 & df$column2 > x2 & ... & df$columnn > xn)
如何使用标准数据帧技术有效地实现这种变量过滤?(Dplyr语法很好,但对于我的数据库来说通常太慢了)
假设每个"值"元素对应于"df"中的一列,将相应的列,元素与Map
进行比较,将其Reduce
到单个logical
向量并得到sum
sum(Reduce("&", Map(">", df[columns], values)))
或者复制"值"以获得与数据集列相同的长度,进行比较,获取逻辑matrix
的rowSums
,检查它是否等于"列"的length
并获取逻辑vector
的sum
sum(rowSums(df[columns] > rep(values, each = length(columns))) == length(columns))