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

时间:2016-06-19 13:27:35

标签: 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分隔为两个不同的列

2 个答案:

答案 0 :(得分:2)

如果您只想检查A列中Pflags的存在(即部分匹配),您可以这样做:

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

TRUEFALSE的使用方式与10的使用方法相同,尽管这些列属于logical类。

答案 1 :(得分:2)

我们可以将mtabulatestr_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