当数据框中的一个值大于矩阵中的值时,R 尝试创建一个计数器

R trying to create a counter when one value in a dataframe is greater than a value in a matrix

所以我有这些值:

这个数据框是 56,000 行 x 1 列

这个矩阵有 56,000 行和 2 列

基本上我想做的是比较数据框行中的值大于矩阵行中的值的次数。

EX: 8.34 > 2.05,所以i加1,然后8.34 > -9.15,i又加1。 4.902 > .87,我又加1了。

所以这是我的代码:

#Question 3 count times observed is different than null
compareObservedNull = function(x, set1, set2){
  i = 0
  if(x[set1] > x[set2]){
    i = i + 1
  }
}

observedGreaterNum = apply(MARGIN = 1, 
              FUN = compareObservedNull,
              tOBSERVEDDF,
              tNullDistributionMatrix)

当 运行 我的代码得到

Error in x[set1] : only 0's may be mixed with negative subscripts

R 中是否实现了在行级别比较值的函数?

基本上,您要做的就是获取值 df[i] 大于 mat[i,j] 的次数,解决方案是转换 data.frame(在添加第二列等于到第一个)转换成矩阵并将其与矩阵进行比较并求和所得逻辑向量。在 R 中你必须记住的一件事是大多数 baseR 函数都是矢量化的,尤其是基本函数 [, +, *, -, >, == ....

df$V2 = df$V1
sum(as.matrix(df) > mat)
#> [1] 175

数据

set.seed(1)
df <- data.frame(V1=rnorm(100, 4,4))
mat <- matrix(rnorm(200), nrow=100)

如果您的数据框名为 dat,列名称为 col_name,矩阵为 mat,您可以这样做:

dat$result <- rowSums(dat$col_name > mat, na.rm = TRUE)

result 将具有 col_name 中值的计数,该计数大于 mat.

中的相应行值

如果您想计算总值,您可以 sum 新列。

sum(dat$result)