如何在R中使用%in%symbol?

如何在R中使用%in%symbol?,r,binary,match,R,Binary,Match,我发现%in%代表匹配运算符binary(在模型公式中:嵌套)。我的工作区中有两个表。第一个表包含 > str(GP.drugs) 'data.frame': 4158393 obs. of 9 variables: $ SHA : Factor w/ 10 levels "Q30","Q31","Q32",..: 1 1 1 1 1 1 1 1 1 1 ... $ PCT : Factor w/ 151 levels "5A3","5A4","5A5",..:

我发现%in%代表匹配运算符binary(在模型公式中:嵌套)。我的工作区中有两个表。第一个表包含

> str(GP.drugs)
'data.frame':   4158393 obs. of  9 variables:
 $ SHA     : Factor w/ 10 levels "Q30","Q31","Q32",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ PCT     : Factor w/ 151 levels "5A3","5A4","5A5",..: 16 16 16 16 16 16 16 16 16 16 ...
 $ PRACTICE: Factor w/ 10191 levels "A81001","A81002",..: 344 345 345 345 345 345 345 345 345 345 ...
 $ BNF.CODE: Factor w/ 1731 levels "0101010C0","0101010E0",..: 878 4 9 11 17 22 25 26 27 28 ...
 $ BNF.NAME: Factor w/ 1524 levels "Abacavir                                ",..: 317 289 294 1284 37 379 655 825 1115 824 ...
 $ ITEMS   : int  1 27 1 2 97 4 40 98 27 2 ...
 $ NIC     : num  1.89 74.94 3.2 7.35 439.83 ...
 $ ACT.COST: num  1.77 69.92 2.98 6.84 408.43 ...
 $ PERIOD  : num  201109 201109 201109 201109 201109 ...
> str(problem.drugs)
'data.frame':   13 obs. of  2 variables:
 $ Drug    : Factor w/ 13 levels "Alogliptin","Glipizide",..: 1 2 3 9 10 11 12 13 4 7 ...
 $ Category: Factor w/ 1 level "metformin": 1 1 1 1 1 1 1 1 1 1 ...
第二个表包含

> str(GP.drugs)
'data.frame':   4158393 obs. of  9 variables:
 $ SHA     : Factor w/ 10 levels "Q30","Q31","Q32",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ PCT     : Factor w/ 151 levels "5A3","5A4","5A5",..: 16 16 16 16 16 16 16 16 16 16 ...
 $ PRACTICE: Factor w/ 10191 levels "A81001","A81002",..: 344 345 345 345 345 345 345 345 345 345 ...
 $ BNF.CODE: Factor w/ 1731 levels "0101010C0","0101010E0",..: 878 4 9 11 17 22 25 26 27 28 ...
 $ BNF.NAME: Factor w/ 1524 levels "Abacavir                                ",..: 317 289 294 1284 37 379 655 825 1115 824 ...
 $ ITEMS   : int  1 27 1 2 97 4 40 98 27 2 ...
 $ NIC     : num  1.89 74.94 3.2 7.35 439.83 ...
 $ ACT.COST: num  1.77 69.92 2.98 6.84 408.43 ...
 $ PERIOD  : num  201109 201109 201109 201109 201109 ...
> str(problem.drugs)
'data.frame':   13 obs. of  2 variables:
 $ Drug    : Factor w/ 13 levels "Alogliptin","Glipizide",..: 1 2 3 9 10 11 12 13 4 7 ...
 $ Category: Factor w/ 1 level "metformin": 1 1 1 1 1 1 1 1 1 1 ...
我使用的代码和错误是

> t<-subset(GP.drugs,n %in% p)
> t
[1] SHA      PCT      PRACTICE BNF.CODE BNF.NAME ITEMS    NIC      ACT.COST  PERIOD  
<0 rows> (or 0-length row.names)
>t
[1] SHA PCT实践BNF.CODE BNF.NAME项目NIC法案成本期
(或长度为0的行名称)
更多错误


这会对表的列名产生影响还是会对两个表的列数产生影响

您的
BNF.NAME
列在
GP.druges
数据框中似乎有额外的尾随空格:注意,它的第一个元素类似于
“Abacavir”
。如果这适用于
GP.drugs
中的所有药物,但不适用于
problem.drugs
中的药物,则会阻止任何药物匹配

要解决此问题,您可以使用
stringr
中的
stru trim
函数,该函数用于修剪前导和尾随空格:

library(stringr)
n <- str_trim(GP.drugs$BNF.NAME)

# same thing you did before
p <- problem.drugs$Drug
t <- subset(GP.drugs, n %in% p)
库(stringr)
n试试看


你能给我们举个数据的例子吗?当您执行
任何操作(n%in%p)
时会发生什么情况?您应该将代码复制/粘贴到问题中,而不是上载屏幕截图。您可以通过将每行缩进四个空格来格式化代码(快捷方式是选择它并单击
{}
按钮,)@MhairiMcNeill,我得到了相同的答案,并且我已经更新了问题。@MhairiMcNeill,它现在为我提供了true。您是对的。我发现了错误,现在它工作得很好。感谢you@MhairiMcNeil,也谢谢你。哈,我什么也没做,不过还是接受了谢谢!仅供参考,在R 3.2.0或3.2.1中,
trimws
功能被添加到
base
包中,其作用与
stru trim
相同。