【发布时间】:2020-10-24 18:18:09
【问题描述】:
我有两个列表,bi.1 和 bi.2,我想计算每个列表中的对应元素是否大于 0。如果两者都大于零,即 bi.1[[i]] 和bi.2[[I]],则计数应为 2,如果其中只有一个大于 0,则计数应为 1,如果均不大于 0,则计数应为 0。 I' m 将计数存储在列表 bi.timehom 中。我认为带有 if_else 语句的 for 循环会起作用。
数据:
dput(pij.unc.96_05)
structure(c(0.388888888888889, 0.0897435897435897, 0.0295698924731183,
0.00645161290322581, 0, 0, 0, 0.375, 0.471153846153846, 0.228494623655914,
0.119354838709677, 0.0307692307692308, 0.0520833333333333, 0,
0.180555555555556, 0.224358974358974, 0.432795698924731, 0.309677419354839,
0.148717948717949, 0.09375, 0, 0.0416666666666667, 0.150641025641026,
0.223118279569892, 0.303225806451613, 0.307692307692308, 0.208333333333333,
0.0789473684210526, 0.0138888888888889, 0.0544871794871795, 0.0672043010752688,
0.183870967741935, 0.292307692307692, 0.25, 0.342105263157895,
0, 0.00961538461538462, 0.010752688172043, 0.0612903225806452,
0.179487179487179, 0.302083333333333, 0.236842105263158, 0, 0,
0.00806451612903226, 0.0161290322580645, 0.041025641025641, 0.09375,
0.342105263157895), .Dim = c(7L, 7L), .Dimnames = list(i = c("Aaa",
"Aa", "A", "Baa", "Ba", "B", "Caa"), j = c("Aaa", "Aa", "A",
"Baa", "Ba", "B", "Caa")))
dput(pij.unc.05_13)
structure(c(0.268292682926829, 0.0600706713780919, 0.0159744408945687,
0.0255474452554745, 0, 0, 0, 0.390243902439024, 0.526501766784452,
0.23961661341853, 0.12043795620438, 0.130208333333333, 0.0862068965517241,
0.0476190476190476, 0.268292682926829, 0.240282685512367, 0.389776357827476,
0.259124087591241, 0.151041666666667, 0.155172413793103, 0.0952380952380952,
0.0731707317073171, 0.0918727915194346, 0.23961661341853, 0.317518248175182,
0.260416666666667, 0.137931034482759, 0.142857142857143, 0, 0.0565371024734982,
0.0894568690095847, 0.193430656934307, 0.270833333333333, 0.25,
0.0476190476190476, 0, 0.0247349823321555, 0.0255591054313099,
0.0766423357664234, 0.15625, 0.267241379310345, 0.571428571428571,
0, 0, 0, 0.0072992700729927, 0.03125, 0.103448275862069, 0.0952380952380952
), .Dim = c(7L, 7L), .Dimnames = list(i = c("Aaa", "Aa", "A",
"Baa", "Ba", "B", "Caa"), j = c("Aaa", "Aa", "A", "Baa", "Ba",
"B", "Caa")))
dput(bi.1)
list(5L, 6L, 7L, 7L, 6L, 6L, 4L)
dput(bi.2)
list(4L, 6L, 6L, 7L, 6L, 6L, 6L)
代码:
#Bi --> #nhi > 0
bi.timehom <- list()
#sub-sample 1
bi.1 <- list()
#sub-sample 2
bi.2 <- list()
for (i in seq_along(1:7)) {
bi.1[[i]] <- nnzero(pij.unc.96_05[i,], na.counted = FALSE)
}
for (i in seq_along(1:7)) {
bi.2[[i]] <- nnzero(pij.unc.05_13[i,], na.counted = FALSE)
}
# check if both samples are greater than 0
for (i in seq_along(1:7)) {
if_else(bi.1[[i]] > 0 & bi.2[[i]] > 0, bi.timehom[[i]] <- 2,
if_else(bi.1[[i]] > 0 | bi.2[[i]] > 0, bi.timehom[[i]] <- 1, bi.timehom[[i]] <- 0))
}
预期输出:
bi.timehom
>
[[1]]
[1] 2
[[2]]
[1] 2
[[3]]
[1] 2
[[4]]
[1] 2
[[5]]
[1] 2
[[6]]
[1] 2
[[7]]
[1] 2
【问题讨论】:
-
nnzero 正在计算矩阵每一行中有多少个元素大于 0。