在多个列之间从列表(使用通配符)进行搜索后,将指示符变量添加到dataframe

在多个列之间从列表(使用通配符)进行搜索后,将指示符变量添加到dataframe,r,R,我昨天发布了一个相关的问题,这个问题已经解决了:见 前一个问题与基于代码列表的子集设置有关,该列表在多个列中添加了“通配符” 我今天的问题与此类似,我想在dataframe中创建一个指示符变量,用于指示列表(M16,M17)中带有通配符(^M16,^M17)的预定义代码之一是否出现在多个指定列(pr1,pr2,pr3)的任意位置 开始数据集 #make a simple data set id = c(1,2,3,4,5,6) pr1 = c("M151", "M141", "M161", "M

我昨天发布了一个相关的问题,这个问题已经解决了:见

前一个问题与基于代码列表的子集设置有关,该列表在多个列中添加了“通配符”

我今天的问题与此类似,我想在dataframe中创建一个指示符变量,用于指示列表(M16,M17)中带有通配符(^M16,^M17)的预定义代码之一是否出现在多个指定列(pr1,pr2,pr3)的任意位置

开始数据集

#make a simple data set
id = c(1,2,3,4,5,6)
pr1 = c("M151", "M141", "M161", "M177", "M197", "M200")
pr2 = c("M100", "M101", "M120", "M135", "M144", "M190")
pr3 = c("M210", "M205", "M167", "M121", "M166", "M174")
data <-  data.frame(id,pr1,pr2,pr3)
#创建一个简单的数据集
id=c(1,2,3,4,5,6)
pr1=c(“M151”、“M141”、“M161”、“M177”、“M197”、“M200”)
pr2=c(“M100”、“M101”、“M120”、“M135”、“M144”、“M190”)
pr3=c(“M210”、“M205”、“M167”、“M121”、“M166”、“M174”)

数据这是一个非常快速、肮脏、笨拙但实用的解决方案

for (n in names(data)){x<- cbind(x,grepl("^M16|^M17", data[,n]))}
data$indicator <- apply(x,1, any)

for(n in names(data)){x我们可以
将'pr'列粘贴在一起,然后使用
grep
创建'indicator'列

data$indicator <- +(grepl('\\b(M16|M17)', 
               do.call(paste, data[grep('^pr', names(data))])))
data$indicator
#[1] 0 0 1 1 1 1

data$indicator这是一个很好的解决方案!我同意-谢谢你们两位的帮助!记录在案,如果M16 | M17等是一个较长的列表(比如20或30个代码),是否可以指定为一个对象?@health\u code如果你有一个20或30个代码的向量,即
v1@akrun谢谢!这正是我想要的。
for (n in names(data)){x<- cbind(x,grepl("^M16|^M17", data[,n]))}
data$indicator <- apply(x,1, any)
data$indicator <- +(grepl('\\b(M16|M17)', 
               do.call(paste, data[grep('^pr', names(data))])))
data$indicator
#[1] 0 0 1 1 1 1