r - 将 "character"矩阵转换为 "logical"

标签 r matrix

我有一个矩阵(具有 class character 的值,如下所示:

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"  

我需要将其转换为这样的矩阵:

      [,1]  [,2]
[1,] FALSE FALSE
[2,]  TRUE  TRUE
[3,]  TRUE  TRUE
[4,]  TRUE  TRUE

as.logicNA 输出为“字符数字”值,而 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

有什么建议吗?

最佳答案

试试这个:

> 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" 

如果您希望 mat 成为由逻辑值组成的 data.frame,则:

> 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"

关于r - 将 "character"矩阵转换为 "logical",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19569391/

相关文章:

matlab - 在 MATLAB 中不使用 for 循环将特定矩阵位置替换为数组值

c++ - opencv错误乘以2 Mat的

r - 在ggplot2中按模态排序facet_grid或facet_wrap网格

r - 如何从数据框中删除超出变量特定范围的记录? [R]

R ggplot2 堆叠条形图按列值归一化

python - 如何检查矩阵是否稀疏

c++ - Armadillo C++ : Efficient and concise way to multiply every row of a matrix by a vector?

regex - R 正则表达式 : find the last but one match

r - 查找 p 值和 z 统计量以及 OLS 线性回归

matrix - 如何从矩阵中删除几列