下面是我的数据库的表示
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的医院),以获得此表:
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“的医院不属于这四个城市中的任何一个。
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注:在我的真实数据库中,我有成千上万的医院和城市。我必须自动化,特别是选择所有城市的所有医院。
发布于 2020-08-08 06:17:12
首先,你想要一个“城市数据集”。我的示例将基于dplyr和tidyr包。
city_data <- mydata %>%
select(CityCode, strPostcode) %>%
distinct
city_data这为您提供了一组唯一的城市代码及其邮政编码:
CityCode strPostcode
1 AA 01
2 BB 10_11
3 CC 20_21_22
4 DD 30_31_32_33然后你想把邮政编码分开。函数separate_rows分离了strPostcode,并将数据帧透视为一个长形式。
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中
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同样,对于所有的AA、BB、CC和DD (不需要过滤,因为city_data2只包含这4个城市):
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 22https://stackoverflow.com/questions/63309638
复制相似问题