String 数据帧切片

String 数据帧切片,string,r,dataframe,slice,String,R,Dataframe,Slice,我希望这个问题对委员会来说不太简单 我已经创建了data.frame df: CAS Name CID 89 13010-47-4 Lomustine 3950 90 130209-82-4 Latanoprost 5311221,5282380,46705340,3890 91 130636-43-0 Nifekalant 268083 92 130929-57-6 Entacapone

我希望这个问题对委员会来说不太简单

我已经创建了data.frame df:

       CAS        Name        CID
89  13010-47-4   Lomustine         3950
90 130209-82-4   Latanoprost       5311221,5282380,46705340,3890
91 130636-43-0   Nifekalant        268083
92 130929-57-6   Entacapone        5281081
和向量向量向量

[1] 5282380 18471829 45923789 44308022 44266812 24883465 24867475 24867460
我想提取包含任意数量vec的df行。我试图通过以下代码解决此问题:

 df$GC[(df$CID %in% vec)] = 1

 df[df$GC==1,]
但是这个解决方案的问题是,我只得到行,在CID列中只包含一个数字。在CID中包含多个值的行(如第90行)不会出现

这个问题有一个优雅的解决方案吗

提前感谢

一种方法是使用grep():

>txt con df close(con)
>ID grep(粘贴(“\\b”,ID,“\\b”,sep=“”,折叠=“|”)dat$CID)
[1] 1 2

鉴于您对EDi答案的评论(我喜欢),我想我应该提出一个建议

将逗号分隔的值压缩到数据帧的一列中是很尴尬的,而且(以我的经验)只会导致沮丧。我经常发现,将其保存在单独的数据结构(列表)中更简单:

dat <- read.table(text = "       CAS        Name        CID
   13010-47-4   Lomustine         3950
  130209-82-4   Latanoprost       5311221,5282380,46705340,3890
  130636-43-0   Nifekalant        268083
  130929-57-6   Entacapone        5281081",sep = "",header = TRUE)

cid <- sapply(dat$CID,strsplit,",",USE.NAMES = FALSE)

dat不错。仅供参考,从R-2.14开始,多亏了R-core,您可以在一个命令中读取文本数据,
txt@Josh:Thank!-我不知道。谢谢你的快速回答。此解决方案的问题是,例如,ID“08”将找到多行,尽管这些行仅包含数字。是否可以只选择在逗号之间包含完整数字的行,例如“5282380”,而不仅仅是“52823”或“2380”?除了上面Joran的精细方法外,您还可以修复EDi的正则表达式,使其仅匹配ID中的精确字符串。方法如下:
grep(粘贴(\\b),ID,\\b,sep=“”,collapse=“”),dat$CID)
。(有关更多信息,请参阅
?regexp
,其中解释了“符号'\b'与单词任一侧的空字符串相匹配”。@Josh+EDi感谢提供这些有用的信息。非常好用。谢谢你的提示。使用sqeezing逗号分隔值确实令人沮丧:)
dat <- read.table(text = "       CAS        Name        CID
   13010-47-4   Lomustine         3950
  130209-82-4   Latanoprost       5311221,5282380,46705340,3890
  130636-43-0   Nifekalant        268083
  130929-57-6   Entacapone        5281081",sep = "",header = TRUE)

cid <- sapply(dat$CID,strsplit,",",USE.NAMES = FALSE)
ID <- c(5282380, 18471829, 45923789, 44308022, 44266812, 24883465, 24867475, 24867460, 3950)
dat[sapply(cid,function(x) {any(x %in% as.character(ID))}),]
          CAS        Name                           CID
1  13010-47-4   Lomustine                          3950
2 130209-82-4 Latanoprost 5311221,5282380,46705340,3890