首页 > 解决方案 > 在数据框中查找行,其中一列中的文本可以在另一列中找到,在 R

问题描述

我想识别数据框中的行,其中一列中的文本可以在另一列中找到。例如,在下面的数据框中,我想识别模型列包含齿轮列中的文本的行(在本例中为第 1、2、7、8、32 行)。

mydf <- cbind.data.frame(model=rownames(mtcars), gear=as.character(mtcars$gear), stringsAsFactors=F)
mydf

                 model gear
1            Mazda RX4    4
2        Mazda RX4 Wag    4
3           Datsun 710    4
4       Hornet 4 Drive    3
5    Hornet Sportabout    3
6              Valiant    3
7           Duster 360    3
8            Merc 240D    4
9             Merc 230    4
10            Merc 280    4
11           Merc 280C    4
12          Merc 450SE    3
13          Merc 450SL    3
14         Merc 450SLC    3
15  Cadillac Fleetwood    3
16 Lincoln Continental    3
17   Chrysler Imperial    3
18            Fiat 128    4
19         Honda Civic    4
20      Toyota Corolla    4
21       Toyota Corona    3
22    Dodge Challenger    3
23         AMC Javelin    3
24          Camaro Z28    3
25    Pontiac Firebird    3
26           Fiat X1-9    4
27       Porsche 914-2    5
28        Lotus Europa    5
29      Ford Pantera L    5
30        Ferrari Dino    5
31       Maserati Bora    5
32          Volvo 142E    4

似乎我应该能够将 grep 或 match 之类的东西与 apply 或 map 之类的东西结合使用,甚至 ifelse,但我不太明白。(我当然可以做一个 for 循环,但我有几百万行数据,我不想这样做。)

标签: rdataframe

解决方案


尝试这个:

mydf$flag = apply(mydf,1, function(x){grepl(x["gear"],x["model"])})

这将导致:

> head(mydf,20)
                 model gear  flag
1            Mazda RX4    4  TRUE
2        Mazda RX4 Wag    4  TRUE
3           Datsun 710    4 FALSE
4       Hornet 4 Drive    3 FALSE
5    Hornet Sportabout    3 FALSE
6              Valiant    3 FALSE
7           Duster 360    3  TRUE
8            Merc 240D    4  TRUE
9             Merc 230    4 FALSE
10            Merc 280    4 FALSE
11           Merc 280C    4 FALSE
12          Merc 450SE    3 FALSE
13          Merc 450SL    3 FALSE
14         Merc 450SLC    3 FALSE
15  Cadillac Fleetwood    3 FALSE
16 Lincoln Continental    3 FALSE
17   Chrysler Imperial    3 FALSE
18            Fiat 128    4 FALSE
19         Honda Civic    4 FALSE
20      Toyota Corolla    4 FALSE

推荐阅读