如何根据列中多个匹配大小写的列表对数据帧进行子集化

时间:2015-04-09 00:49:20

标签: r data-cleaning

所以我有一个包含某些字符的列表,如下所示

list <- c("MY","GM+" ,"TY","RS","LG")

我有一个名为&#34; CODE&#34;的变量。在数据框中如下

code <- c("MY GM+","","LGTY", "RS","TY")
df <- data.frame(1:5,code)
df

  code
1 MY GM+
2 
3 LGTY
4 RS
5 TY

现在我要创建5个名为&#34; MY&#34;,&#34; GM +&#34;,&#34; TY&#34;,&#34; RS&#34;的新变量, &#34; LG&#34;

如果在CODE变量

中存在匹配大小写,则取二进制值1
df 
   code    MY GM+ TY RS LG
1  MY GM+  1  1   0  0  0
2          0  0   0  0  0
3  LGTY    0  0   1  0  1
4  RS      0  0   0  1  0 
5  TY      0  0   1  0  0

非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:3)

由于您知道将返回多少个值(5),以及您希望其类型是什么(整数),因此可以将vapply()grepl()一起使用。我们可以使用integer()的{​​{1}}参数中的vapply()将生成的逻辑矩阵转换为整数值。

FUN.VALUE

我认为你的原始数据有一些拼写错误,所以这就是我使用的:

cbind(df, vapply(List, grepl, integer(nrow(df)), df$code, fixed = TRUE))
#     code MY GM+ TY RS LG
# 1 MY GM+  1   1  0  0  0
# 2         0   0  0  0  0
# 3   LGTY  0   0  1  0  1
# 4     RS  0   0  0  1  0
# 5     TY  0   0  1  0  0