使用可变条件

时间:2016-10-21 08:16:23

标签: r

我有一个data.frame,我想在其中执行逐行计数与指定标准。我无法弄清楚的部分是我想为每一行设置不同的计数标准。

假设我有10行,我想为10行设置10个不同的标准。

我试过:count.above <- rowSums(Data > rate),其中rate是一个带有10个标准的向量,但R只使用第一个作为整个框架的标准。

我想我可以将我的框架分成10个向量并执行此任务,但我认为有一些简单的方法可以做到这一点而不诉诸于此。

2 个答案:

答案 0 :(得分:1)

编辑:这取决于您是要对行还是列进行操作。见下文:

这是mapplyReduce的工作。假设您有一个

行的数据框
df1 <- data.frame(a=1:10,b=2:11,c=3:12)

假设我们想要计算a> 6,b&gt; 3和c&gt; 5的行数。这是通过mapply

完成的
mapply(">",df1,c(6,3,5),SIMPLIFY=FALSE)

$a
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

$b
[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

$c
[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

现在我们使用Reduce查找全部TRUE

Reduce("&",mapply(">",df1,c(6,3,5),SIMPLIFY=FALSE))
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE

最后,我们使用sum将它们全部添加:

sum(Reduce("&",mapply(">",df1,c(6,3,5),SIMPLIFY=FALSE)))
[1] 4

如果您想要每行而不是全局聚合的结果,那么apply是要使用的函数:

apply(df1,1,function(v) sum(v>c(6,3,5)))
[1] 0 0 1 2 2 2 3 3 3 3

答案 1 :(得分:0)

给出虚拟数据(来自@ zx8754s解决方案)

# dummy data
df1 <- data.frame(matrix(1:15, nrow = 3))

myRate <- c(7, 5, 1)

使用应用

的解决方案

由@JDL提供

rowSums(apply(df1, 2, function(v) v > myRate))

使用Reduce模式的替代解决方案

Reduce(function(l, v) cbind(l[,1] + (l[,2] > myRate), l[,-2:-1]),
       1:ncol(df1),
       cbind(0, df1))