R 如何将一列中的值分隔为不同的列?

R 如何将一列中的值分隔为不同的列?,r,R,我在一列中有以下条目 flags ***AP*** ***AP*** ***A**** ***AP*** ***A**** ***AP*** ***AP*** ***AP*** 我需要创建两个具有如下值的列 flag1 flag2 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 其中,flag1中的1对应于A存在,同样,flag2中的1对应于p存在。 如何删除*并将A和P分离到两个不同的列如果您只想检查列标志中的

我在一列中有以下条目

flags
***AP***
***AP***
***A****
***AP***
***A****
***AP***
***AP***
***AP***
我需要创建两个具有如下值的列

flag1 flag2
1     1
1     1
1     0
1     1
1     0
1     1
1     1
1     1
其中,flag1中的1对应于A存在,同样,flag2中的1对应于p存在。
如何删除*并将A和P分离到两个不同的列

如果您只想检查列标志中的

A
P
是否存在(即部分匹配),您可以执行以下操作:

cbind(df, sapply(c("A", "P"), grepl, df$flags))
#     flags    A     P
#1 ***AP*** TRUE  TRUE
#2 ***AP*** TRUE  TRUE
#3 ***A**** TRUE FALSE
#4 ***AP*** TRUE  TRUE
#5 ***A**** TRUE FALSE
#6 ***AP*** TRUE  TRUE
#7 ***AP*** TRUE  TRUE
#8 ***AP*** TRUE  TRUE

TRUE
FALSE
的使用方法与
1
0
相同,尽管列属于
逻辑类
如果您只想检查
A
p
列中
标志
的存在性(即部分匹配),您可以执行以下操作:

cbind(df, sapply(c("A", "P"), grepl, df$flags))
#     flags    A     P
#1 ***AP*** TRUE  TRUE
#2 ***AP*** TRUE  TRUE
#3 ***A**** TRUE FALSE
#4 ***AP*** TRUE  TRUE
#5 ***A**** TRUE FALSE
#6 ***AP*** TRUE  TRUE
#7 ***AP*** TRUE  TRUE
#8 ***AP*** TRUE  TRUE

TRUE
FALSE
的使用方法与
1
0
相同,尽管列属于
逻辑类

我们可以使用
mtabulate
stru extract

library(stringr)
library(qdapTools)
cbind(df1, mtabulate(str_extract_all(df1$flags, "[A-Z]")))
#     flags A P
#1 ***AP*** 1 1
#2 ***AP*** 1 1
#3 ***A**** 1 0
#4 ***AP*** 1 1
#5 ***A**** 1 0
#6 ***AP*** 1 1
#7 ***AP*** 1 1
#8 ***AP*** 1 1

我们可以将
mtabulate
stru extract

library(stringr)
library(qdapTools)
cbind(df1, mtabulate(str_extract_all(df1$flags, "[A-Z]")))
#     flags A P
#1 ***AP*** 1 1
#2 ***AP*** 1 1
#3 ***A**** 1 0
#4 ***AP*** 1 1
#5 ***A**** 1 0
#6 ***AP*** 1 1
#7 ***AP*** 1 1
#8 ***AP*** 1 1