过滤行值以一组模式结尾的行

时间:2018-08-30 06:27:32

标签: r regex dplyr

我的数据集如下

File_name     Folder
ord.cpp        1
rod.ibo        1
ppol.h         2
lko.cpp        3
rto.cp         3
tax.mo         2
t_po..lo.cpp   4

我需要对该数据集进行子集化,以便在数据集中仅出现File_name以“ .cpp”或“ .h”结尾的行

4 个答案:

答案 0 :(得分:1)

使用grepl作为基本R选项:

df_subset <- df[grepl("\\.(?:cpp|h)$", df$File_name), ]
df_subset

     File_name Folder
1      ord.cpp      1
3       ppol.h      2
4      lko.cpp      3
7 t_po..lo.cpp      4

Demo

答案 1 :(得分:0)

我们还可以使用file_ext包中的tools函数来获取文件的文件扩展名,然后使用它来对数据帧进行子集化。

library(tools)
df[file_ext(df$File_name) %in% c("cpp", "h"), ]

#     File_name Folder
#1      ord.cpp      1
#3       ppol.h      2
#4      lko.cpp      3
#7 t_po..lo.cpp      4

答案 2 :(得分:0)

Base R解决方案:

# Looking for a string eding with .cpp or .h
df[endsWith(df$File_name,(".cpp"))|endsWith(df$File_name,(".h")),]

输出:

     File_name Folder
1      ord.cpp      1
3       ppol.h      2
4      lko.cpp      3
7 t_po..lo.cpp      4

答案 3 :(得分:0)

一种dplyr解决方案:

df %>%
  filter(str_detect(File_name, ".cpp|.h"))

     File_name Folder
1      ord.cpp      1
2       ppol.h      2
3      lko.cpp      3
4 t_po..lo.cpp      4

或者:

df %>%
filter(grepl(".cpp|.h", File_name))

     File_name Folder
1      ord.cpp      1
2       ppol.h      2
3      lko.cpp      3
4 t_po..lo.cpp      4