我有一个带有逻辑值的二维矩阵(TRUE
/ FALSE
)。
我需要的是一个结果向量,它表示每行的逻辑或元素。
head(m1)
Z1 Z2 Z3 Z4 Z5 Z6 ZZ
1 TRUE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE FALSE TRUE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE TRUE FALSE FALSE FALSE FALSE
得到的矢量(一个暗淡的矩阵)应该看起来像。
RZ2
1 TRUE
2 FALSE
3 FALSE
4 TRUE
5 FALSE
6 TRUE
据我所知,一个选项是使用*apply
函数。
但在那里使用哪个func-parameter?
答案 0 :(得分:3)
我们可以在每行中使用rowSums
到sum
TRUE
个值。然后,我们加倍否定(!!
)以转换回逻辑向量,这样所有不是' 0'将是TRUE
和' 0'被强迫FALSE
。
v1 <- unname(!!rowSums(m1))
v1
#[1] TRUE FALSE FALSE TRUE FALSE TRUE
如果pmax
是m1
,则其他选项为data.frame
。如果每行中有任何TRUE,则TRUE
将返回1,仅FALSE
值为0。这可以转换回逻辑向量(!=0
)。
v1 <- do.call(pmax, as.data.frame(m1))!=0
v1
#[1] TRUE FALSE FALSE TRUE FALSE TRUE
或者我们可以使用apply
使用MARGIN=1
并any
作为FUN
来遍历行。如果TRUE
为TRUE,则返回any
,否则为FALSE。
v1 <- unname(apply(m1, 1, any))
v1
#[1] TRUE FALSE FALSE TRUE FALSE TRUE
上述输出vector
可以转换为matrix
matrix(v1, ncol=1, dimnames=list(seq_along(v1), 'RZ2'))
# RZ2
#1 TRUE
#2 FALSE
#3 FALSE
#4 TRUE
#5 FALSE
#6 TRUE
m1 <- structure(c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = 6:7,
.Dimnames = list(
c("1", "2", "3", "4", "5", "6"), c("Z1", "Z2", "Z3", "Z4",
"Z5", "Z6", "ZZ")))
答案 1 :(得分:1)
也许这样的事情有效:
df = data.frame(c(TRUE,FALSE, FALSE),c(TRUE,FALSE, FALSE),c(TRUE,FALSE, TRUE))
> sumdf = apply(df, MARGIN = 1, FUN = sum)
> sumdf[sumdf > 0] = 1
> sumdf
[1] 1 0 1