我试图在向量中使用字符串来调出另一个向量,以便所有内容都将在粘贴命令中输出。然后,我将使用这些字符向量来过滤出数据框。
以mtcars数据框为例(将行名转换为列,以便可以使用某些字符)...
df <-mtcars
df $ Cars <-行名(df)
我对以下矢量感兴趣,所有搜索
allSearches = c(“ SearchA”,“ Search1”)
以及“ SearchA”和“ Search1”的定义如下:
SearchA = c(“ mazda”,“ honda”)
搜索1 = c(“ merc”,“丰田”)
我希望能够通过SearchA中的变量,然后通过Search1中的变量来过滤数据帧df。
对于单独的代码行,我可以进行以下操作...
sub = df [grepl(paste(Search1,collapse =“ |”),df $ Cars,ignore.case = T),]
sub $ SearchA <-“是”
df = merge(df,sub,all.x = T)
这样做的目的是使它处于“ for”循环中,这样我就可以在需要时添加其他搜索。
我尝试了以下方法...
对于(i in 1:length(allSearches)){
sub = df [grepl(paste(allSearches [i],collapse =“ |”),df $ Cars,ignore.case = T),]
sub [,allSearches [i]] <-“是”
df = merge(df,sub,all.x = T)
}
但出现以下错误...
误差在
[<-.data.frame
(*tmp*
,,allSearches [I],值= “是”):替换有1行,数据有0
在尝试剖析问题时,我发现此特定方法的问题位于“粘贴”函数中,其中...
粘贴(allSearches [1],collapse =“ |”)
输出以下内容...
“ SearchA”
代替完整的向量
[1]“马自达”“本田”
任何帮助将不胜感激。我正在处理很多适合“ allSearches”的“搜索”,因此最好将所有内容放入一个循环中,这样我就不必为每个过滤器做三行。同样,不同“搜索”的向量名称也不遵循任何特定模式。
谢谢!杰西博
您还可以保留以前的代码,而只需使用get
:
在循环中,如果您更换
sub = df[grepl(paste(allSearches[i],collapse="|"), df$Cars, ignore.case=T),]
经过
sub = df[grepl(paste(get(allSearches[i]),collapse="|"), df$Cars, ignore.case=T),]
它应该工作。
for (i in 1:length(allSearches)){
sub = df[grepl(paste(get(allSearches[i]),collapse="|"), df$Cars, ignore.case=T),]
sub[,allSearches[i]] <- "Yes"
df = merge(df, sub, all.x = T)
}
> df[c(6:13,18:20,29),]
mpg cyl disp hp drat wt qsec vs am gear carb Cars SearchA Search1
6 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 Maserati Bora <NA> <NA>
7 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 Merc 450SLC <NA> Yes
8 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 AMC Javelin <NA> <NA>
9 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 Dodge Challenger <NA> <NA>
10 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 Ford Pantera L <NA> <NA>
11 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 Merc 450SE <NA> Yes
12 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 Merc 450SL <NA> Yes
13 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 Merc 280C <NA> Yes
18 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 Ferrari Dino <NA> <NA>
19 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Yes <NA>
20 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag Yes <NA>
29 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 Honda Civic Yes <NA>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句