用grep修剪R中的数据帧?

时间:2017-06-27 18:17:04

标签: r dataframe

我的数据框dat有两列,如下所示:

value   condition
2       learning/cat
4       learning/dog
1       naming/cat
6       naming/dog

我想修剪'数据框只包含条件包含"命名"。

的行

我尝试用grep执行此操作:

dat = dat[grep("naming", dat$condition, value = T)]

会导致以下错误:

Error in `[.data.frame`(dat, grep("naming", dat$condition, value = T)) : 
  undefined columns selected

有人可以建议修复吗?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您可以使用separate中的tidyr分割条件:

df = input_df %>% separate( condition, into = c("condition1", "condition2"), sep = "/")

然后只使用过滤器:

only_naming_df = df %>% filter(condition1 == "naming")

答案 1 :(得分:0)

在括号后添加逗号后,错误很容易解决。但是我希望有一个可用选项列表来完成这项任务。 Belows是其他人和我的解决方案和评论。

使用grep或grepl

grep返回索引(行号),而grepl返回逻辑向量(TRUE或FALSE)。请注意,在这种情况下使用grep时,不应添加value = T,因为它将返回字符串,这对子集化没有帮助。

dat[grep("naming", dat$condition), ]
dat[grepl("naming", dat$condition), ]

来自dplyr和stringr的函数

str_detect相当于grepl(pattern, x),而str_which相当于grep(pattern, x)

library(dplyr)
library(stringr)

dat %>% filter(str_detect(condition, "naming"))
dat %>% slice(str_which(condition, "naming"))

数据准备

# Create example dataframes
dat <- read.table(text = "value   condition
2       learning/cat
4       learning/dog
1       naming/cat
6       naming/dog",
                  header = TRUE, stringsAsFactors = FALSE)