我的数据框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
有人可以建议修复吗?任何帮助将不胜感激!
答案 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
返回逻辑向量(TRUE或FALSE)。请注意,在这种情况下使用grep
时,不应添加value = T
,因为它将返回字符串,这对子集化没有帮助。
dat[grep("naming", dat$condition), ]
dat[grepl("naming", dat$condition), ]
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)