【发布时间】:2017-08-17 16:08:50
【问题描述】:
我在 R 中有两个 df(元=一些冗余信息)
df1:
id value1 value2 value3 value4
id1_meta_meta-meta 4.93 13.93 16.8 35.39
id2_meta_meta-meta 28.63 45.43 30.52 61.71
id3_meta_meta-meta 3.35 1.26 7.98 4.43
id4_meta_meta-meta 16.78 50.47 32.48 55.52
id5_meta_meta-meta 474.23 807.71 664.45 442.55
id6_meta_meta-meta 26.26 32.83 24.64 41.58
id7_meta_meta-meta 230.1 202.93 166.71 295.48
id8_meta_meta-meta 651.21 1282.71 1012.28 2650.21
df2:
V1
id1
id2
id3
id4
id5
问题
尝试根据 df2 中的 id 过滤 df1 中的行
代码
library(dplyr)
library(stringr)
df.common = df1 %>%
filter(str_detect(id, '*_') %in% df2$V1)
错误
Error in filter_impl(.data, quo) :
Evaluation error: Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX).
期望的输出
df.common:
id value1 value2 value3 value4
id1_meta_meta-meta 4.93 13.93 16.8 35.39
id2_meta_meta-meta 28.63 45.43 30.52 61.71
id3_meta_meta-meta 3.35 1.26 7.98 4.43
id4_meta_meta-meta 16.78 50.47 32.48 55.52
id5_meta_meta-meta 474.23 807.71 664.45 442.55
【问题讨论】:
-
如果您将
filter条件更改为filter(str_detect(id, df2$V1)),您的原始代码将起作用 -
@JakeKaupp 我收到此错误
Warning message: In stri_detect_regex(string, pattern, opts_regex = opts(pattern)) : longer object length is not a multiple of shorter object length -
这是一个警告,而不是错误,会产生您想要的输出。
-
是的,菜鸟的错误很抱歉,但我没有得到我所期望的
> dim(df.common) [1] 2 13 -
str_detect检测字符串并返回 TRUE 或 FALSE,因此您的代码在df2中寻找 TRUE 或 FALSE。相反,使用str_extract拉出 ID 部分,然后用它进行测试:str_extract(id, "id[0-9]+") %in% df2$V1。