R 转换;“字符”;矩阵到";逻辑的;
我有一个矩阵(值为R 转换;“字符”;矩阵到";逻辑的;,r,matrix,R,Matrix,我有一个矩阵(值为类字符),如下所示: mat <- matrix(c("0", "TRUE", "1", "2", "FALSE", "TRUE", "TRUE", "2"), nrow = 4, ncol = 2) #> mat # [,1] [,2] #[1,] "0" "FALSE" #[2,] "TRUE" "TRUE" #[3,] "1" "TRUE" #[4,] "2" "2" as.logi
类
字符
),如下所示:
mat <- matrix(c("0", "TRUE", "1", "2",
"FALSE", "TRUE", "TRUE", "2"), nrow = 4, ncol = 2)
#> mat
# [,1] [,2]
#[1,] "0" "FALSE"
#[2,] "TRUE" "TRUE"
#[3,] "1" "TRUE"
#[4,] "2" "2"
as.logical
将NA
s输出为“字符数字”值,而as.numeric
将NA
s输出为“字符逻辑”值
我找到了一个解决方案,但我认为我遗漏了一些显而易见的东西,比如立即转换:
new_mat2 <- array(as.numeric(mat), dim(mat))
new_mat <- array(as.logical(mat), dim(mat))
new_mat[is.na(new_mat)] <- new_mat2[is.na(new_mat)]
mat2 <- array(as.logical(new_mat), dim(new_mat))
#> mat2
# [,1] [,2]
#[1,] FALSE FALSE
#[2,] TRUE TRUE
#[3,] TRUE TRUE
#[4,] TRUE TRUE
new_mat2试试这个:
> mat[,] <- ifelse(mat %in% c("0", "FALSE"), FALSE, TRUE) # pay attention to @Señor O comment to shorten this step.
> mat
[,1] [,2]
[1,] "FALSE" "FALSE"
[2,] "TRUE" "TRUE"
[3,] "TRUE" "TRUE"
[4,] "TRUE" "TRUE"
NA
是一个逻辑常数,因此它有必须遵守的真值表法则。我们可以利用这些法则来做
mat2 <- as.logical(mat) & ( as.integer(mat) > 0 )
mat2[is.na(mat2)] <- TRUE
dim(mat2) <- dim(mat)
# [,1] [,2]
#[1,] FALSE FALSE
#[2,] TRUE TRUE
#[3,] TRUE TRUE
#[4,] TRUE TRUE
mat2(0)
mat2[is.na(mat2)]mat!=“0”和mat!=“假”
我所知道的最直接的是:
as.numeric(因子(矩阵))
其中‘matrix’是我们要更改为数值的矩阵的名称如何mat[,]谢谢!我没有想到用%
这样操作%!我会接受的,不过——说实话——我希望在R
的函数或帮助页面中有一些我没有注意到(但应该注意到)的东西。不过,不要让我的接受打消你的勇气,如果你有任何见解的话!:)再次感谢!我真的很感谢对“NA
as logical”这件事的洞察;我从来没有想过这是一种需要。我急切地等待着回答:“你知道吗…”谢谢@亚历克西斯·拉兹,不客气。不过,你必须小心使用NA
。在逻辑运算符的帮助页面底部有一些真值表(try?`!`
),这也会丢失dimnames@JeremyLeipzig这不是OP的一部分,但是如果说问题中的矩阵mat
确实有您希望在转换后保留的名称,那么它就简单到dimnames(mat2)
> mat <- sapply(as.data.frame(mat), as.logical)
> mat
V1 V2
[1,] FALSE FALSE
[2,] TRUE TRUE
[3,] TRUE TRUE
[4,] TRUE TRUE
> sapply(mat, class) # checking class
[1] "logical" "logical" "logical" "logical" "logical" "logical" "logical" "logical"
mat2 <- as.logical(mat) & ( as.integer(mat) > 0 )
mat2[is.na(mat2)] <- TRUE
dim(mat2) <- dim(mat)
# [,1] [,2]
#[1,] FALSE FALSE
#[2,] TRUE TRUE
#[3,] TRUE TRUE
#[4,] TRUE TRUE
> mat
[,1] [,2]
[1,] "0" "FALSE"
[2,] "TRUE" "TRUE"
[3,] "1" "TRUE"
[4,] "2" "2"
> mat != "0" & mat != "FALSE"
[,1] [,2]
[1,] FALSE FALSE
[2,] TRUE TRUE
[3,] TRUE TRUE
[4,] TRUE TRUE