R 从矩阵创建布尔矩阵
我有以下矩阵:R 从矩阵创建布尔矩阵,r,matrix,stringr,R,Matrix,Stringr,我有以下矩阵: > myletters <- matrix(letters[1:4], ncol = 2) > myletters [,1] [,2] [1,] "a" "c" [2,] "b" "d" 现在我有一个逻辑向量,但我想要一个矩阵。 我期望的结果是: [,1] [,2] [1,] TRUE TRUE [2,] FALSE FALSE 不要误解我的意思,当然我知道一些可能的方法,但是我认为像matrix(str_detect(
> myletters <- matrix(letters[1:4], ncol = 2)
> myletters
[,1] [,2]
[1,] "a" "c"
[2,] "b" "d"
现在我有一个逻辑向量,但我想要一个矩阵。
我期望的结果是:
[,1] [,2]
[1,] TRUE TRUE
[2,] FALSE FALSE
不要误解我的意思,当然我知道一些可能的方法,但是我认为像matrix(str_detect(myletters,“[ac]”),ncol=2)这样的解决方案非常难看。一定有更好的办法吗?
我不知道为什么会这样。在这种情况下,我得到了我想要的输出,与下面的情况有什么区别
> matrix(1:4, ncol = 2) > 2
[,1] [,2]
[1,] FALSE TRUE
[2,] FALSE TRUE
我们可以将其重新分配,以获取的lhs上原始数据的结构,其中一个选项是
out <- `dim<-`(myletters %in% c("a", "c"), dim(myletters))
out
# [,1] [,2]
#[1,] TRUE TRUE
#[2,] FALSE FALSE
out类似于apply
by的解决方案,这里是一个带有base R
的解决方案,使用apply()
和grepl()
给
[,1] [,2]
[1,] TRUE TRUE
[2,] FALSE FALSE
非常感谢。我喜欢应用
的方式。您知道如何使用purr
-函数实现这一点吗?我通常更喜欢它们而不是应用
family。@TobiSonne the purrr familymap
,在data.frame的列中循环。这里是一个矩阵
,因此,您可能需要将其转换为data.frame
或tibble,即作为.data.frame(myletters)%%>%map\u df(str\u detect,“[ac]”
哦,当然!我的数据最初是一个data.frame
,所以这个解决方案更好!谢谢你的回答myletters==“a”| myletters==“c”
适用于示例矩阵。
structure(str_detect(myletters, "[ac]"), dim = dim(myletters))
# [,1] [,2]
#[1,] TRUE TRUE
#[2,] FALSE FALSE
apply(myletters, 2, str_detect, "[ac]")
# [,1] [,2]
#[1,] TRUE TRUE
#[2,] FALSE FALSE
library(purrr)
as.data.frame(myletters) %>%
map_df(str_detect, "[ac]")
library(dplyr)
as.data.frame(myletters) %>%
mutate_all(str_detect, "[ac]")
out <- `dim<-`(myletters %in% c("a", "c"), dim(myletters))
out
# [,1] [,2]
#[1,] TRUE TRUE
#[2,] FALSE FALSE
apply(myletters, 2, function(v) grepl("[ac]",v))
[,1] [,2]
[1,] TRUE TRUE
[2,] FALSE FALSE