我在列
中有以下条目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分隔为两个不同的列
答案 0 :(得分:2)
如果您只想检查A
列中P
和flags
的存在(即部分匹配),您可以这样做:
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
的使用方法相同,尽管这些列属于logical
类。
答案 1 :(得分:2)
我们可以将mtabulate
与str_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