当数据框中的一个值大于矩阵中的值时,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)
所以我有这些值:
这个数据框是 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)