首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据字符串进行过滤

如何根据字符串进行过滤
EN

Stack Overflow用户
提问于 2020-08-08 05:59:57
回答 1查看 65关注 0票数 1

下面是我的数据库的表示

代码语言:javascript
复制
ID<-1:10
CityCode<-c("AA","BB","BB","CC","CC","CC","DD","DD","DD","DD")
strPostcode<-c("01",rep("10_11",2),rep("20_21_22",3),rep("30_31_32_33",4))
HospitalCode<-c("04","05","10","20","21","33","34","65","22","03")

mydata<-data.frame(ID,CityCode,strPostcode, HospitalCode)

这是一些背景知识。我有患者的地理来源(城市代码和相关的邮政编码:前两列)和他们接受治疗的医院的地理位置(HospitalCode)。我想根据医院来过滤这个数据库。城市由城市代码和与该城市相关的所有邮政编码(以破折号分隔)指定。另一方面,医院只由邮政编码指定。我不能直接把一个城市和一家医院联系起来。但是,如果医院代码在城市代码字符串中(Column=、strPostcode),则意味着医院属于该城市。因此,我只想过滤掉城市"CC“中的医院(即代码为20、21或22的医院),以获得此表:

代码语言:javascript
复制
 ID CityCode strPostcode HospitalCode

1   4       CC    20_21_22           20
2   5       CC    20_21_22           21
3   9       DD 30_31_32_33           22

然后我想过滤4个城市AA、BB、CC和DD的医院(即由"_":01、10_11、20_21_22、30_31_32_33分隔的这组代码中的所有医院代码)。因为邮政编码为"04“、"05”、"34“、"65”、"03“的医院不属于这四个城市中的任何一个。

代码语言:javascript
复制
 ID CityCode strPostcode HospitalCode

3   3       BB       10_11           10
4   4       CC    20_21_22           20
5   5       CC    20_21_22           21
6   6       CC    20_21_22           33
9   9       DD 30_31_32_33           22

注:在我的真实数据库中,我有成千上万的医院和城市。我必须自动化,特别是选择所有城市的所有医院。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 06:17:12

首先,你想要一个“城市数据集”。我的示例将基于dplyrtidyr包。

代码语言:javascript
复制
city_data <- mydata %>%
  select(CityCode, strPostcode) %>%
  distinct
city_data

这为您提供了一组唯一的城市代码及其邮政编码:

代码语言:javascript
复制
  CityCode strPostcode
1       AA          01
2       BB       10_11
3       CC    20_21_22
4       DD 30_31_32_33

然后你想把邮政编码分开。函数separate_rows分离了strPostcode,并将数据帧透视为一个长形式。

代码语言:javascript
复制
city_data2 <- hosp_data %>%
  tidyr::separate_rows(strPostcode)
city_data2

   CityCode strPostcode
1        AA          01
2        BB          10
3        BB          11
4        CC          20
5        CC          21
6        CC          22
7        DD          30
8        DD          31
9        DD          32
10       DD          33

现在假设您希望所有与城市CC相关的HospitalCodes患者。首先,您只过滤city_data2中的CC行,然后检查哪些HospitalCode在这些strPostcode

代码语言:javascript
复制
CC_codes <- city_data2 %>%
  filter(CityCode == 'CC')

mydata %>%
  filter(HospitalCode %in% CC_codes$strPostcode)

  ID CityCode strPostcode HospitalCode
1  4       CC    20_21_22           20
2  5       CC    20_21_22           21
3  9       DD 30_31_32_33           22

同样,对于所有的AABBCCDD (不需要过滤,因为city_data2只包含这4个城市):

代码语言:javascript
复制
mydata %>%
  filter(HospitalCode %in% city_data2$strPostcode)

  ID CityCode strPostcode HospitalCode
1  3       BB       10_11           10
2  4       CC    20_21_22           20
3  5       CC    20_21_22           21
4  6       CC    20_21_22           33
5  9       DD 30_31_32_33           22
代码语言:javascript
复制
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63309638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档